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 operator
ES6의 기능:
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)