回答:
applyまたはでオブジェクトのほとんどの機能を使用する場合call、contextパラメーターは作業中のオブジェクトでなければなりません。
この場合、あなたは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)では、spreadオペレーターを使用して複数のアイテムを一度に追加できます。
var arr = [1];
var newItems = [2, 3];
arr.push(...newItems);
console.log(arr);
参照してくださいKangaxのES6互換ブラウザは互換性があるかを確認するために、テーブルを
使用できますArray.concat:
var result = a.concat(b);
Array.prototype.push.apply(arr1, arr2)正しい答えarr1.concat(arr2)です。あなたが使っているのは新しいアレイを作成しているからです。
arr1 = arr1.concat(arr2)は大したことではなく、よりすっきりしているように見えます。古いアレイへのプッシュまたは古いアレイの新しいアレイへの置き換えは、ニーズによって異なります。10m以上の要素を処理する場合、古い配列へのプッシュはより速く機能します。小さなチャンクを管理する場合、速度の違いはほとんど見つかりません。どちらのオプションも完全に合法です。
prototype.push.applyだけ呼び出しますpush。また、上記の区別は速度については必要ありませんが、インプレース操作と新しいアレイの作成については必要ありません。配列を取得するメソッドがあり、それをインプレースで変更する必要がある場合はどうなりますか?concatそれは関数の呼び出し元の変数を変更しないので、この方法は、可能性もVisionNのコードで、動作することはできません。
a = a.concat(b)構文はまだより短い構文ですArray.prototype.push.apply(arr1, arr2)
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を本番環境で使用したい場合は、Babelまたは同様のトランスパイラーを使用することもできます。
使用をお勧めする多くの回答がありますArray.prototype.push(a, b)。それは良い方法です、しかし、あなたが本当に大きなBを持っている場合、あなたは(理由は、あまりにも多くの引数の)スタックオーバーフローエラーになります。ここで注意してください。
N個の配列を連結する最も効率的な方法は何ですか?を参照してください。詳細については。