여러 요소를 배열로 푸시


284

여러 요소를 하나의 배열로 푸시하려고하지만 오류가 발생합니다.

> a = []
[]
> a.push.apply(null, [1,2])
TypeError: Array.prototype.push called on null or undefined

나는 내가 그 생각, 루비에서 할 거라고 유사한 물건을 할 노력하고있어 apply같은입니다 *.

>> a = []
=> []
>> a.push(*[1,2])
=> [1, 2]

답변:


240

와 객체의 대부분의 기능을 사용하는 경우 apply또는 callcontext매개 변수는 작업중인 객체 여야합니다.

이 경우, 당신은 필요합니다 a.push.apply(a, [1,2])(또는 더 정확하게 Array.prototype.push.apply(a, [1,2]))


618

다음과 같은 방법으로 여러 요소를 배열에 넣을 수 있습니다

var a = [];
    
a.push(1, 2, 3);

console.log(a);


1
이 답변과 선택된 답변은 다르게 예상치 못한 결과를 낳습니다. a.push (1) vs. a.push ([1])
oevna

1
아무도 대답 할 수있는 이유보다 더 많은 투표를 한 이유를 설명 할 수 있습니까? 더 쉬울 수 있지만 유연성이 떨어집니다. 2 개의 배열을 병합하려는 경우 작동하지 않습니다.
BluE

@BluE 두 배열을 병합하려면 array.concat ()을 사용하십시오
Florent Arlandis

@FlorentArlandis array.concat은 두 번째 배열을 첫 번째 배열에 추가하지 않습니다. 새로운 것을 만듭니다. 나는 그것이 비슷한 것을 알고 있습니다. 스프레드 연산자는 내가 찾던 것입니다. 자세한 내용은 다른 답변과 의견을 참조하십시오.
BluE

435

이제 ECMAScript2015 (일명 ES6)에서는 스프레드 연산자 를 사용하여 여러 항목을 한 번에 추가 할 수 있습니다 .

var arr = [1];
var newItems = [2, 3];
arr.push(...newItems);
console.log(arr);

참조 Kangax의 ES6 호환성 브라우저 호환성을 확인하려면 테이블을


41
whaaaaaaat 이것은 굉장합니다. 게다가, 당신이 typescript로 그것을하면 push.apply로 컴파일되어 역 호환성을 가지게됩니다
Chris

72

당신은 사용할 수 있습니다 Array.concat:

var result = a.concat(b);

16
Array.prototype.concat은 새 배열을 반환합니다.
suricactus

12
그는 기존 배열로 푸시하고 Array.prototype.push.apply(arr1, arr2)싶기 때문에 arr1.concat(arr2)새 배열을 작성 하기 때문에 정답 입니다.
suricactus

3
@suricactus arr1 = arr1.concat(arr2)는 큰 문제가 아니며 훨씬 더 깔끔해 보입니다. 기존 어레이로 푸시하거나 기존 어레이를 새 어레이로 교체하려면 필요에 따라 다릅니다. 오래된 배열로 밀어 넣는 10m + 요소를 처리하면 작은 덩어리를 관리하면 속도 차이가 거의 없습니다. 두 옵션 모두 완전히 합법적입니다.
VisioN

5
@YuvalA. 한 번만 prototype.push.apply호출 push합니다. 그리고 위의 구별은 속도가 아니라 새로운 배열을 만드는 대신 적절한 작업입니다. 배열을 가져 와서 그 자리에서 수정해야하는 메서드가 있다면 어떻게합니까? 이 concat함수는 호출자의 변수를 수정하지 않으므로 VisionN의 코드에서도 작동하지 않을 수 있습니다.
coderforlife

1
a = a.concat(b)짧은 구문보다 여전히Array.prototype.push.apply(arr1, arr2)
Aizzat Suhardi

22

Array.concatECMAScript 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합니다.


4

사용하는 것이 좋습니다 많은 답변이 있습니다 : Array.prototype.push(a, b). 좋은 방법입니다. 그러나 실제로 b가 크면 스택 오버플로 오류가 발생합니다 (너무 많은 인수 때문에). 여기서 조심하십시오.

N 배열을 연결하는 가장 효율적인 방법무엇입니까?를 참조하십시오 . 상세 사항은.


3
이것은 질문에 대한 답변을 제공하지 않습니다. 저자에게 비평을하거나 설명을 요청하려면 게시물 아래에 의견을 남겨주십시오. [좋은 답변을 어떻게 쓰나요? ] ( stackoverflow.com/help/how-to-answer )
mrun

1
죄송합니다. 평판이 충분하지 않아 답변에 댓글을 남길 수 없습니다. 그러나 여기에 전체 개요가 언급되어 있어야합니다. 제발 나 좀 도와 줄래? 그런 다음 답변을 제거하겠습니다.
12kb

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.