답변:
와 객체의 대부분의 기능을 사용하는 경우 apply
또는 call
의 context
매개 변수는 작업중인 객체 여야합니다.
이 경우, 당신은 필요합니다 a.push.apply(a, [1,2])
(또는 더 정확하게 Array.prototype.push.apply(a, [1,2])
)
다음과 같은 방법으로 여러 요소를 배열에 넣을 수 있습니다
var a = [];
a.push(1, 2, 3);
console.log(a);
당신은 사용할 수 있습니다 Array.concat
:
var result = a.concat(b);
Array.prototype.push.apply(arr1, arr2)
싶기 때문에 arr1.concat(arr2)
새 배열을 작성 하기 때문에 정답 입니다.
arr1 = arr1.concat(arr2)
는 큰 문제가 아니며 훨씬 더 깔끔해 보입니다. 기존 어레이로 푸시하거나 기존 어레이를 새 어레이로 교체하려면 필요에 따라 다릅니다. 오래된 배열로 밀어 넣는 10m + 요소를 처리하면 작은 덩어리를 관리하면 속도 차이가 거의 없습니다. 두 옵션 모두 완전히 합법적입니다.
prototype.push.apply
호출 push
합니다. 그리고 위의 구별은 속도가 아니라 새로운 배열을 만드는 대신 적절한 작업입니다. 배열을 가져 와서 그 자리에서 수정해야하는 메서드가 있다면 어떻게합니까? 이 concat
함수는 호출자의 변수를 수정하지 않으므로 VisionN의 코드에서도 작동하지 않을 수 있습니다.
a = a.concat(b)
짧은 구문보다 여전히Array.prototype.push.apply(arr1, arr2)
Array.concat
ECMAScript 2015 (일명 ES6, ES2015) 의 대안으로 배열을 수정하지 않고 새 배열을 반환하는 경우 다음 과 같이 스프레드 연산자를 사용할 수 있습니다 .
var arr = [1];
var newItems = [2, 3];
var newerItems = [4, 5];
var newArr = [...arr, ...newItems, ...newerItems];
console.log(newArr);
메소드가 배열을 변경 / 수정하므로 push
메소드와 다릅니다 push
.
브라우저에서 특정 ES2015 기능이 작동하는지 확인하려면 Kangax의 호환성 표를 확인하십시오 .
당신은 또한 사용할 수 있습니다 바벨 당신이 브라우저 지원을 위해 대기 할 및 생산 ES2015을 사용하지 않으려는 경우 또는 유사한 transpiler합니다.
사용하는 것이 좋습니다 많은 답변이 있습니다 : Array.prototype.push(a, b)
. 좋은 방법입니다. 그러나 실제로 b가 크면 스택 오버플로 오류가 발생합니다 (너무 많은 인수 때문에). 여기서 조심하십시오.
N 배열을 연결하는 가장 효율적인 방법 은 무엇입니까?를 참조하십시오 . 상세 사항은.