어레이 항목을 다른 어레이에 복사

JavaScript 어레이가 있다dataArray새로운 배열로 밀어넣고 싶다.newArray하지만 난 원하지 않아newArray[0]되려고dataArray모든 항목을 새 배열에 푸시합니다.

var newArray = [];
newArray.pushValues(dataArray1); newArray.pushValues(dataArray2); // ... 

또는 그 이상:

var newArray = new Array (
dataArray1.values(),
dataArray2.values(),
// ... where values() (or something equivalent) would push the individual values into the array, rather than the array itself ); 

이제 새 어레이에는 개별 데이터 어레이의 모든 값이 포함됩니다.이런 줄임말이 있나요?pushValues각 개인에 대해 반복할 필요가 없기 때문에dataArray아이템을 하나씩 추가하시겠습니까?



질문에 대한 답변



다음과 같이 concat 함수를 사용합니다.

var arrayA = [1, 2]; var arrayB = [3, 4]; var newArray = arrayA.concat(arrayB); 

가치newArray될 것이다[1, 2, 3, 4](arrayA그리고.arrayB변경되지 않음concat는 결과에 대한 새 배열을 만들고 반환합니다).




ECMAScript 6 에서는, 다음과 같이 전개 구문을 사용할 수 있습니다.

let arr1 = [0, 1, 2]; let arr2 = [3, 4, 5]; arr1.push(...arr2);
console.log(arr1)

확산 구문은 모든 주요 브라우저에서 사용할 수 있습니다(IE11 제외).현재의 호환성에 대해서는, 다음의 호환성 표(계속 갱신되고 있는)를 참조해 주세요.

다만, 퍼포먼스에 관한 코멘트에 대해서는, 이하의 잭 기핀의 회신을 참조해 주세요.그런 것 같다concat여전히 확산 연산자보다 더 좋고 빠릅니다.




어레이의 규모가 크지 않은 경우(아래 주의사항 참조),push()값을 추가할 배열의 메서드입니다. push()여러 파라미터를 사용할 수 있기 때문에apply()method를 사용하여 푸시할 값의 배열을 함수 매개 변수 목록으로 전달합니다.이것은, 사용하는 것보다 유리합니다.concat()새로운 어레이를 작성하지 않고 어레이에 요소를 추가할 수 있습니다.

단, (멤버 수가 100,000명 이상인) 대규모 어레이에서는 이 트릭이 실패할 수 있습니다.이러한 어레이에서는 루프를 사용하는 것이 더 나은 방법입니다.상세한 것에 대하여는, https://stackoverflow.com/a/17368101/96100 를 참조해 주세요.

var newArray = []; newArray.push.apply(newArray, dataArray1); newArray.push.apply(newArray, dataArray2); 

이를 함수로 일반화할 수 있습니다.

function pushArray(arr, arr2) {
arr.push.apply(arr, arr2); } 

…또는 에 추가합니다.Array의 프로토타입:

Array.prototype.pushArray = function(arr) {
this.push.apply(this, arr); };
var newArray = []; newArray.pushArray(dataArray1); newArray.pushArray(dataArray2); 

…또는 오리지널을 에뮬레이트합니다.push()여러 개의 파라미터를 허용하는 방법concat(),맘에 들다push()에서는 여러 파라미터를 사용할 수 있습니다.

Array.prototype.pushArray = function() {
this.push.apply(this, this.concat.apply([], arguments)); };
var newArray = []; newArray.pushArray(dataArray1, dataArray2); 

다음은 대규모 어레이와 IE <= 8을 포함한 모든 주요 브라우저에 적합한 마지막 예의 루프 기반 버전입니다.

Array.prototype.pushArray = function() {
var toPush = this.concat.apply([], arguments);
for (var i = 0, len = toPush.length; i < len; ++i) {
this.push(toPush[i]);
} }; 



MDN에서 우아한 방법 발견

var vegetables = ['parsnip', 'potato']; var moreVegs = ['celery', 'beetroot'];
// Merge the second array into the first one // Equivalent to vegetables.push('celery', 'beetroot'); Array.prototype.push.apply(vegetables, moreVegs);
console.log(vegetables); // ['parsnip', 'potato', 'celery', 'beetroot'] 

또는 를 사용할 수 있습니다.spread operatorES6의 기능:

let fruits = [ 'apple', 'banana']; const moreFruits = [ 'orange', 'plum' ];
fruits.push(...moreFruits); // ["apple", "banana", "orange", "plum"] 



다음은 가장 간단한 것 같습니다.

var newArray = dataArray1.slice(); newArray.push.apply(newArray, dataArray2); 

“push”는 변수 개수의 인수를 받아들이기 때문에apply의 방법push다른 배열의 모든 요소를 푸시하는 함수입니다.첫 번째 인수(“newArray”)를 “this”로 사용하고 어레이 요소를 나머지 인수로 사용하여 푸시하는 호출을 구성합니다.

slice첫 번째 문에서 첫 번째 배열의 복사본을 가져오므로 수정하지 않습니다.

업데이트 슬라이스를 사용할 수 있는 javascript 버전을 사용하는 경우,push표현 대상:

newArray.push(...dataArray2)