2011-03-08 3 views
11

현재 배열에 항목을 추가하려고합니다. 나는 오류가이 방법을 수행함으로써자바 스크립트는 현재 배열에 항목을 추가합니다.

var arrayValues = new Array(); 
arrayValues.push("Value 1"); 
arrayValues.push("Value 2"); 
arrayValues = document.getElementsByTagName('a'); 
arrayValues.push("Value 3"); 

, 나는 나는 그것이 오류가 발생합니다 새로운 항목을 추가 할 때 하이퍼 링크 모음을받은 후, 값 1, 값 2를 얻을 해달라고 : 개체가이 속성을 지원하지 않습니다 또는 푸시 방법 인 방법.

하이퍼 링크 모음을 할당 한 후 배열에 어떤 현상이 발생합니까? 어떻게 새 항목을 추가 할 수 있습니까?

답변

14

arrayValues.push(document.getElementsByTagName('a'));을 찾으셨습니까?

그렇지 않으면 NodeListgetElementsByTagName()에 의해 반환됩니다.이 값은 방금 값을 푸시 한 배열을 덮어 씁니다.

사이드 노트 : 여기서 new Array()을 사용할 이유가 없습니다. var arrayValues = [];으로 작성하십시오.

+1

그리고 그것은 비록 NodeList를가 배열이 아닌 "배열처럼." – jpsimons

2

모든 <a> 요소를 배열에 푸시하려면 먼저 NodeList를 배열로 변환해야합니다. 대부분의 사람들은 Array.prototype.slice.call(nodelist)을 사용합니다.

배열이 있으면 array.pushfunction.apply과 함께 사용하여 한 번에 호출 할 수 있습니다.

결과 코드는 다음과 같습니다

var arrayValues = []; 
arrayValues.push("Value 1"); 
arrayValues.push("Value 2"); 
arrayValues.push.apply(arrayValues, Array.prototype.slice.call(document.getElementsByTagName('a'))); 
arrayValues.push("Value 3"); 
+0

'push'에 대한 호출을'적용 '할 필요는 없습니다. 'arrayValues'는 이미 배열이며'arrayValues.push()'를 호출하면 올바른 범위 ('arrayValues')에서 올바른 함수 ('push')가 실행됩니다. –

+1

실제로'.push()'에 여러 인자를 보내고 싶습니다. 예를 들어'a.push (1); a.push (b); a.push (4)'이면'var a = [], b = [2,3];','a'는 '[1, [2,3], 4]'. 그러나,'a.push.apply (a, b);'를 사용하면'[1,2,3,4]'가됩니다. 이것이이 답변의 예상되는 동작입니다 : 모든 배열을 ''으로 밀어 넣으십시오. 당신은'a = a.concat (b);'의 버전이라고 말할 수 있습니다. – Thai

+0

좋아요, 그 말이 더 합리적입니다. 그렇다면 왜 단지'concat() '를 사용하지 않는가? –

관련 문제