[javascript] N 배열을 연결하는 가장 효율적인 방법은 무엇입니까?

JavaScript에서 N 개의 객체 배열을 연결하는 가장 효율적인 방법은 무엇입니까?

배열은 변경 가능하며 결과는 입력 배열 중 하나에 저장 될 수 있습니다.



답변

두 개 이상의 어레이를 연결하는 경우 concat()편의성과 성능을 기대할 수있는 방법입니다.

var a = [1, 2], b = ["x", "y"], c = [true, false];
var d = a.concat(b, c);
console.log(d); // [1, 2, "x", "y", true, false];

두 개의 배열 만 연결 push하려면 배열에 추가 할 요소로 구성된 여러 인수 를 허용 한다는 사실을 사용하여 새 배열을 생성하지 않고 한 배열에서 다른 배열의 끝으로 요소를 추가 할 수 있습니다. 함께 slice()사용할 수도 concat()있지만 이렇게하면 성능 이점이없는 것 같습니다 .

var a = [1, 2], b = ["x", "y"];
a.push.apply(a, b);
console.log(a); // [1, 2, "x", "y"];

ECMAScript 2015 및 이후 버전에서는

a.push(...b)

그러나 대규모 배열 (10 만 멤버 이상)의 경우 배열을 요소 push( apply()ECMAScript 2015 스프레드 연산자를 사용 하거나 사용)에 전달하는 기술 이 실패 할 수 있습니다. 이러한 배열의 경우 루프를 사용하는 것이 더 좋습니다. 자세한 내용은 https://stackoverflow.com/a/17368101/96100 을 참조하십시오.


답변

[].concat.apply([], [array1, array2, ...])

편집 : 효율성 증명 : http://jsperf.com/multi-array-concat/7

edit2 : Tim Supinie는 주석에서 해석기가 호출 스택 크기를 초과 할 수 있다고 언급했습니다. 이것은 아마도 js 엔진에 달려 있지만 Chrome에서 적어도 “최대 호출 스택 크기 초과”를 얻었습니다. 테스트 사례 : [].concat.apply([], Array(300000).fill().map(_=>[1,2,3])). (현재 승인 된 답변을 사용하여 동일한 오류가 발생 했으므로 그러한 사용 사례를 예상하거나 다른 사람들을 위해 라이브러리를 구축 중이므로 어떤 솔루션을 선택하든 특별한 테스트가 필요할 수 있습니다.)


답변

ES2015 (ES6)를 사용하는 사람들

이제 스프레드 구문을 사용하여 배열을 연결할 수 있습니다.

const arr1 = [0, 1, 2],
      arr2 = [3, 4, 5];

const result1 = [...arr1, ...arr2]; // -> [0, 1, 2, 3, 4, 5]

// or...

const result2 = [...arr2, ...arr1]; // -> [3, 4, 5, 0, 1, 2]


답변

concat()방법은 둘 이상의 배열을 결합하는 데 사용됩니다. 기존 배열은 변경하지 않고 결합 된 배열의 사본 만 반환합니다.

array1 = array1.concat(array2, array3, array4, ..., arrayN);


답변

Array.prototype.concat.apply를 사용하여 여러 배열의 연결을 처리하십시오.

var resultArray = Array.prototype.concat.apply([], arrayOfArraysToConcat);

예:

var a1 = [1, 2, 3],
    a2 = [4, 5],
    a3 = [6, 7, 8, 9];
Array.prototype.concat.apply([], [a1, a2, a3]); // [1, 2, 3, 4, 5, 6, 7, 8, 9]


답변

맵 / 필터 / 정렬 등을 통해 결과를 파이핑하는 동안 배열의 배열을 연결하려는 경우 사용할 수 있습니다 reduce

let sorted_nums = ['1,3', '4,2']
  .map(item => item.split(','))   // [['1', '3'], ['4', '2']]
  .reduce((a, b) => a.concat(b))  // ['1', '3', '4', '2']
  .sort()                         // ['1', '2', '3', '4']


답변

여러 어레이 및 ES6의 경우

Array.prototype.concat(...arr);

예를 들면 다음과 같습니다.

const arr = [[1, 2, 3], [4, 5, 6], [7, 8 ,9]];
const newArr = Array.prototype.concat(...arr);
// output: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]