7

2 つの配列があります。1 つは関数からの参照 (パラメーター) として取得され、もう 1 つは関数の一部として作成されます。ここで説明したのとまったく同じシナリオです。

concat メソッドを使用せずに 2 つの配列を追加する

上記の提案に従って push.apply() メソッドを使用していましたが、配列が参照として関数に送信された場合、 concat() を使用して2つの配列をマージできない理由を誰かに説明してもらえますか?

4

3 に答える 3

9

concat元の配列を使用する場合は変更されません。それへの参照がある場合、新しい要素は表示されません。

var arr1 = [ "a", "b" ];
var arr2 = [ "c", "d" ];
arr1.push.apply(arr1, arr2);

基本的にこれを行います:

[ "a", "b" ].push("c", "d");

apply配列を引数のリストに変換します。への最初の引数applycontextちなみに、arr1この場合はプッシュを に適用するためarr1です。

使用できますconcat

var arr1 = [ "a", "b" ];
var arr2 = [ "c", "d" ];
var arr3 = arr1.concat(arr2);

これでオリジナルarr1がそのまま残ります。arr1要素と要素の両方を含む新しい配列を作成しましarr2た。オリジナルへの参照がある場合、arr1それはunmodifiedになります。それが を使いたくない理由かもしれませんconcat

于 2013-05-21T21:17:07.903 に答える
1

2 つの配列 "a" と "b" があるとします。Array.concatメソッドは、 a または b の突然変異なしで a と b の間の連結を表す "c"の新しいインスタンスを返します。プッシュされた要素の最後のインデックスを返し、インスタンスを変更します。 ES6(または15、不明)以降、パラメーターをアンパックすることが可能であり、プッシュを使用して(有害なコードなしで)連結することもできますArrayArray.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] 
于 2018-07-16T07:36:17.893 に答える