[javascript] 여러 요소를 배열로 푸시

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

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

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

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



답변

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

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


답변

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

var a = [];

a.push(1, 2, 3);

console.log(a);


답변

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

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

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


답변

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

var result = a.concat(b);


답변

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


답변

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

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


답변

var a=[];
a.push({
 name_a:"abc",
 b:[]
});

a.b.push({
  name_b:"xyz"
});