2011-05-01 4 views
1

2 차원 배열 2 개의에 스플 라이스를하려고합니다. 입니다.splice가 배열 대신 문자열을 반환하는 이유는 무엇입니까?

var rem = arr[1].splice(0); 
alert(arr); 
// The array _rem_ is now correct, but _arr_ is left with an empty index: "a,b,,e,f". 

내가 덜 이상적인 해결 방법보다이

1)

var rem = arr.splice(1,1); 
alert(rem[0]); 
// This alerts the entire array as one long string "c,d". 
// The expected behavior is "c" (index 0 of the returned array _rem_). 

2),하지만 난 ': 여기

var one = ["a","b"]; 
var two = ["c","d"]; 
var thr = ["e","f"]; 
var arr = [one,two,thr]; 

내이 개 성공하지 못한 시도하다 한 가지 기능으로 이것을 달성하기를 바란다.

var test = arr[1].slice(0); 
arr.splice(1,1); 
+0

내가 잘못 테스트 한 것 같습니까? 나는 이것을 재현 할 수 없다. 'arr.splice (1,1)'이 도움이 될 것입니다. 여기 작업 버전의 바이올린이 있습니다. http://jsfiddle.net/pNgTh/ – Robert

+0

"문자열 부 배열"이란 무엇입니까? – Gabe

+0

하하, "문자열 _ 대신에 배열로". – Gary

답변

4

재미있는 관찰. 등 (임의로)

접합 방법이 둘 이상의 인자로 호출을 시작한다

, deleteCount에 및 항목 1, 항목 2, 상기 deleteCount에 소자 다음 ECMA-사양 (. 262, ED 5) 발 ( 경우라도)를 반환 배열 인덱스 시작부터 배열 삭제 된 요소를 포함하는 등의 인자 항목 1, 항목 2, 배열 객체로 대체된다.

Array.splice 따라서 제거 요소의 배열을 반환 . 당신은 아마도 당신이 alert()에 배열을 전달 때 발생하여 혼란 보인다

var rem = arr.splice(1,1)[0]; 
alert(rem[0]); //=> 'c' 
+0

뛰어난, 그게 내가 찾고 있었던 바로 그 것이다. 감사! – Gary

+0

나는 당신의 솔루션을 발견하기 전에 이것에 대해 1 시간을 낭비했습니다. 감사! –

0

내가 예상 스플 라이스 방법으로의 작업은 항상 배열을 반환 생각합니다.

당신이 말할 때 arr [1]. splice (0); 하나에 그것의 호출 spilce 및 [ 'a]를 제공

그리고 당신이 할 때 arr.splice (1,1); 그것은 [하나]를 반환합니다

+0

arr.splice (1,1)는 올바른 배열을 연결하고 예상대로 요소를 제거합니다. 문제는 반환되는 것은 배열이 아니라는 것입니다. alert (arr.splice (1,1) [0])는 예상대로 "c"가 아닌 "c, d"를 표시합니다. – Gary

+0

예, splice는 항상 배열을 반환하기 때문입니다. 'var arr = [1,2,3,4]'와'arr.slice (1,1)'은 [1] –

+0

이 될 것입니다. 그런 일은 일어나지 않습니다 ... arr.slice (1,1)는 배열이지만, 반환되는 인덱스 0을 보려고하면 배열은 반환되지 않지만 배열의 모든 요소의 문자열은 연결되어있는 것을 볼 수 있습니다. – Gary

2

: 당신이 제거 된 배열을 참조 할 경우에 따라서,이 구문해야한다. 내가 원하는 것을 말할 수있는 것으로부터 첫 번째 예가 옳다.어떤 접합을 수행하기 전에, 당신이 당신의 arr 변수가 당신이 무엇을,

[ 
    ["a", "b"], 
    ["c", "d"], 
    ["e", "f"] 
] 

변수 rem의 배열 인덱스 1 저장을에 arr에서 하나 개의 요소를 제거 var rem = arr.splice(1, 1)를 호출 한 후입니다

arr :

[ 
    ["a", "b"], 
    ["e", "f"] 
] 

rem :

[ 
    ["c", "d"] 
] 

그래서 rem[0]은 배열 ["c", "d"]입니다. 이것이 내가 원한다고 생각한 것입니다.

관련 문제