2 つの配列があります。1 つは関数からの参照 (パラメーター) として取得され、もう 1 つは関数の一部として作成されます。ここで説明したのとまったく同じシナリオです。
上記の提案に従って push.apply() メソッドを使用していましたが、配列が参照として関数に送信された場合、 concat() を使用して2つの配列をマージできない理由を誰かに説明してもらえますか?
2 つの配列があります。1 つは関数からの参照 (パラメーター) として取得され、もう 1 つは関数の一部として作成されます。ここで説明したのとまったく同じシナリオです。
上記の提案に従って push.apply() メソッドを使用していましたが、配列が参照として関数に送信された場合、 concat() を使用して2つの配列をマージできない理由を誰かに説明してもらえますか?
concat
元の配列を使用する場合は変更されません。それへの参照がある場合、新しい要素は表示されません。
var arr1 = [ "a", "b" ];
var arr2 = [ "c", "d" ];
arr1.push.apply(arr1, arr2);
基本的にこれを行います:
[ "a", "b" ].push("c", "d");
apply
配列を引数のリストに変換します。への最初の引数apply
はcontext
ちなみに、arr1
この場合はプッシュを に適用するためarr1
です。
使用できますconcat
:
var arr1 = [ "a", "b" ];
var arr2 = [ "c", "d" ];
var arr3 = arr1.concat(arr2);
これでオリジナルarr1
がそのまま残ります。arr1
要素と要素の両方を含む新しい配列を作成しましarr2
た。オリジナルへの参照がある場合、arr1
それはunmodifiedになります。それが を使いたくない理由かもしれませんconcat
。
2 つの配列 "a" と "b" があるとします。Array.concat
メソッドは、 a または b の突然変異なしで a と b の間の連結を表す "c"の新しいインスタンスを返します。プッシュされた要素の最後のインデックスを返し、インスタンスを変更します。
ES6(または15、不明)以降、パラメーターをアンパックすることが可能であり、プッシュを使用して(有害なコードなしで)連結することもできますArray
Array.push
this
a = [1,2,3,4]; // a=[1,2,3,4];
b = [5,6,7,8]; // b=[5,6,7,8];
a.push(...b) // a=[1,2,3,4,5,6,7,8]; b=[5,6,7,8]