次のコードを見つけましたが、AとBの違いがわかりません。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
A
fruits.splice(2,0,["Lemon", "Kiwi"]);
B
fruits.splice(...[2,0].concat(["Lemon", "Kiwi"]));
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var A = fruits.splice(2, 0, ["Lemon", "Kiwi"]);
var B = fruits.splice(...[2, 0].concat(["Lemon", "Kiwi"]));
console.log(A)
console.log(B)
まず、ステートメントAとステートメントBはdifferentの結果を生成します。
_Statement A
_では、0個のアイテムを削除しながら、位置2に配列要素として配列(_["Lemon", "Kiwi"]
_)を挿入しています。したがって、位置2の別の文字列配列に文字列配列を挿入しています。
_var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2,0,["Lemon", "Kiwi"]);
console.log(fruits);
_
ただし、、_Statement B
_ははるかに興味深い。完全に理解するには、まず次のようなコア部分をログアウトします。
console.log(...[2,0].concat(["Lemon", "Kiwi"])); // basic array concatenation then spread
ご覧のとおり、_2 0 Lemon Kiwi
_が生成されます。次に、fruits.splice(..here..)
にパラメーターとして渡されます。 _array#splice
_ によれば、位置2に2つの文字列(Lemon&Kiwi)を入力し、0個の要素を削除します。
_var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(...[2,0].concat(["Lemon", "Kiwi"]));
// is same as fruits.splice(2, 0, 'Lemon', 'Kiwi')
console.log(fruits);
_
注意:
array#splice
_は元の配列を更新します。Statement A
_は親文字列配列にarray
(IE _["Lemon", "Kiwi"]
_)を挿入しますが、_Statement B
_は2つの文字列(IE _'Lemon', 'Kiwi'
_)親文字列配列。御treat走["Lemon", "Kiwi"]
1つのアイテムとして、指定されたインデックスに挿入します
["Banana", "Orange", ["Lemon", "Kiwi"], "Apple" , "Mango"];
B連結[2,0]
および["Lemon", "Kiwi"]
そして、次のようなコンマ区切りの引数としてスプライスに渡します
fruits.splice(2,0,"Lemon", "Kiwi");
以下のように配列を変更します
["Banana", "Orange", "Lemon", "Kiwi", "Apple", "Mango"]
doc 関数シグネチャから:
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
Bで:
fruits.splice(...[2,0].concat(["Lemon", "Kiwi"]));
[2,0].concat(["Lemon", "Kiwi"])
は[2,0,"Lemon", "Kiwi"]
を意味するためです。
したがって、fruits.splice(...[2,0,"Lemon", "Kiwi"]);
は、スプレッド演算子(...
)を使用してfruits.splice(2,0,"Lemon", "Kiwi");
になります。
上記のコードは、0個のアイテムを削除せずに、インデックス"Lemon"
から"Kiwi"
、2
を追加します。
この場合、2
はstart
インデックス、deleteCount
は0
、item1
は"Lemon"
、item2
は"Kiwi"
です。
今Aで:
fruits.splice(2,0,["Lemon", "Kiwi"]);
0個のアイテムを削除して、インデックス["Lemon", "Kiwi"]
から2
を追加すると言っています。この場合、2
はstart
インデックス、deleteCount
は0
、item1
は["Lemon", "Kiwi"]
です。
まず、スプライスの仕組みを理解する必要があります
array.splice(start [、deleteCount [、item1 [、item2 [、...]]]])
start(ゼロから開始するインデックス)、削除する要素の数、残りの引数はその開始インデックスに追加されます。
これで、スプライスが明確になったので、それらのステートメントをより明確に理解するために、一歩ずつ進みましょう。
次の声明
fruits.splice(...[2,0].concat(["Lemon", "Kiwi"]));
連結後
fruits.splice(...[2,0,"Lemon", "Kiwi"]);
広がると
fruits.splice(2,0,"Lemon", "Kiwi");
次に、スプライスはインデックス2から実を取り、何も削除せず(ゼロを指定)、残りの引数(「レモン」と「キウィ」)を追加します。
したがって、["Banana", "Orange", "Lemon", "Kiwi", "Apple", "Mango"]
どこのように
fruits.splice(2,0,["Lemon", "Kiwi"]);
スプライスはインデックス2から実を取り、何も削除しません(再び0が与えられます)。残りの引数、つまり「["Lemon"、 "Kiwi"]」を追加します。
したがって、["Banana", "Orange", ["Lemon", "Kiwi"], "Apple", "Mango"]
役に立てば幸いです。
スプレッドを使用しない場合、Bは次のとおりです。
fruits.splice( 2, 0, "Lemon", "Kiwi" );
concat
は少しわかりにくいですが、次のように書くこともできます。
fruits.splice( ...[ 2, 0 ], ...[ "Lemon", "Kiwi" ] );
または:
fruits.splice( ...[ 2, 0, "Lemon", "Kiwi" ] );