여러 요소를 배열로 푸시


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또는 call의 context매개 변수는 작업중인 객체 여야합니다.

이 경우, 당신은 필요합니다 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.