回答:
3つ以上の配列を連結している場合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];
2つの配列のみを連結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)
ただし、大規模な配列(メンバー数が100,000以上)の場合、要素の配列をpush
(apply()
ECMAScript 2015スプレッドオペレーターを使用して)に渡す手法は失敗する可能性があります。このような配列では、ループを使用する方が適切です。https://stackoverflow.com/a/17368101/96100を参照してくださいを参照してください。
a.concat(b)
テストケースは不必要に配列のコピーを作成しa
てからそれを捨てているようです。
concat()
は、一般的に高速に表示されます。配列を既存の配列に連結して配置する場合のpush()
方法です。回答を更新しました。
[].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]))
。(現在受け入れられている回答を使用しても同じエラーが発生したため、そのようなユースケースを予測したり、他の人のためにライブラリを構築したりしているため、どのソリューションを選択しても、特別なテストが必要になる場合があります。)
これで、Spread Syntaxを使用して配列を連結できます。
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()
メソッドは、2つ以上の配列を結合するために使用されます。既存の配列は変更されません。結合された配列のコピーが返されるだけです。
array1 = array1.concat(array2, array3, array4, ..., arrayN);
concat
は、元の配列を変更せずに新しい配列を作成するために特に使用されます。更新したい場合array1
は、使用する必要がありますarray1.push(...array2, ...array3, ...array4)
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]
複数のアレイのアレイと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 ]
newArr = Array.from(new Set(newArr));
。
any[]
どうなるのですか?タイピングはそこにあります-奇妙です。
[].concat.apply([], ...arr)
は、大容量でのパフォーマンスが大幅に向上します。
jsperf.comサイトを使用してパフォーマンスを比較できます。ここに連結へのリンクがありますます。
以下の比較を追加しました:
var c = a.concat(b);
そして:
var c = [];
for (i = 0; i < a.length; i++) {
c.push(a[i]);
}
for (j = 0; j < b.length; j++) {
c.push(b[j]);
}
もう1つは、クロームでほぼ10倍遅いです。
push.apply()
。これは、concat()
Chromeを除くすべてのブラウザよりも高速であるようです。私の答えを見てください。
concat関数で簡単に:
var a = [1,2,3];
var b = [2,3,4];
a = a.concat(b);
>> [1,2,3,2,3,4]
これは、複数の配列を連結できる関数です
function concatNarrays(args) {
args = Array.prototype.slice.call(arguments);
var newArr = args.reduce( function(prev, next) {
return prev.concat(next) ;
});
return newArr;
}
例-
console.log(concatNarrays([1, 2, 3], [5, 2, 1, 4], [2,8,9]));
出力されます
[1,2,3,5,2,1,4,2,8,9]
配列の配列があり、要素を単一の配列に連結したい場合は、次のコードを試してください(ES2015が必要です)。
let arrOfArr = [[1,2,3,4],[5,6,7,8]];
let newArr = [];
for (let arr of arrOfArr) {
newArr.push(...arr);
}
console.log(newArr);
//Output: [1,2,3,4,5,6,7,8];
または関数型プログラミングに興味があるなら
let arrOfArr = [[1,2,3,4],[5,6,7,8]];
let newArr = arrOfArr.reduce((result,current)=>{
result.push(...current);
return result;
});
console.log(newArr);
//Output: [1,2,3,4,5,6,7,8];
または、spreadオペレーターなしでES5構文を使用するとさらに良い
var arrOfArr = [[1,2,3,4],[5,6,7,8]];
var newArr = arrOfArr.reduce((result,current)=>{
return result.concat(current);
});
console.log(newArr);
//Output: [1,2,3,4,5,6,7,8];
この方法は、いいえを知らない場合に便利です。コード時の配列の数。
new Set()
重複したアイテムを削除します。削除するだけです。[].concat(...Array)
プッシュで配列をマージ:
const array1 = [2, 7, 4];
const array2 = [3, 5,9];
array1.push(...array2);
console.log(array1)
ConcatおよびSpreadオペレーターの使用:
const array1 = [1,2];
const array2 = [3,4];
// Method 1: Concat
const combined1 = [].concat(array1, array2);
// Method 2: Spread
const combined2 = [...array1, ...array2];
console.log(combined1);
console.log(combined2);
連結する配列が2つしかなく、実際に追加する必要がある場合新しい配列を作成するのではなく、配列の1つ、プッシュまたはループが適しています。
ベンチマーク:https : //jsperf.com/concat-small-arrays-vs-push-vs-loop/
これを試して:
i=new Array("aaaa", "bbbb");
j=new Array("cccc", "dddd");
i=i.concat(j);
N個の配列がデータベースから取得され、ハードコーディングされていない場合、ES6を使用してこのようにします
let get_fruits = [...get_fruits , ...DBContent.fruit];