私はこのコードについて疑問に思っていました:
var numbers, _ref;
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
[].splice.apply(numbers, [3, 4].concat(_ref = [-3, -4, -5, -6])), _ref;
alert(numbers);
ここから、結果は次の[0, 1, 2, -3, -4, -5, -6, 7, 8, 9]
ようになり、誰かがこれについて私に説明できますか?
私はこのコードについて疑問に思っていました:
var numbers, _ref;
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
[].splice.apply(numbers, [3, 4].concat(_ref = [-3, -4, -5, -6])), _ref;
alert(numbers);
ここから、結果は次の[0, 1, 2, -3, -4, -5, -6, 7, 8, 9]
ようになり、誰かがこれについて私に説明できますか?
function .apply(context、argsArray)は、指定されたコンテキストで関数を呼び出し、関数の引数としてargsArrayを渡します。
この場合、関数は[].spliceであり、次のパラメーターをこの順序で受け取ります。
[3,4].concat(_ref = [-3, -4, -5, -6])2つの配列を連結して配列に評価し、を与え[3, 4, -3, -4, -5, -6]ます。これはに渡されるargsArray.apply()であるため、次のようになります。
したがって.apply()、.splice()関数は配列のコンテキストで実行され、numbersインデックス3、4、5、および6の要素が削除され、要素-3、-4、-5、および-6が「2」と「7」の間に挿入されます。元の配列で。
編集:(その部分の説明ではなく)元のコードが何に相当するかの要約については、RobGの回答を参照してください。
コードは次の変数宣言に解決されます。
var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
var _ref = [-3, -4, -5, -6];
そしてこれらの表現:
numbers.splice(3, 4, -3, -4, -5, -6);
_ref;
alert(numbers);
[3, 4].concat(_ref = [-3, -4, -5, -6])インデックス3から[3, 4, -3, -4, -5, -6]の4つの要素が削除され、要素「-3、-4、-5、-6」がインデックス3に挿入されるように評価します。スプライスを参照してください。[].splice.apply(numbers, [3, 4, -3, -4, -5, -6]))numbers.splice(3, 4, -3, -4, -5, -6)