簡體   English   中英

沒有索引的javascript數組拼接

[英]javascript array splice without index

我想知道這段代碼:

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 ,它按以下順序獲取以下參數:

  1. index - 開始更改數組的位置
  2. howMany - 要從索引處開始刪除的元素
  3. element1,...,elementN - 要在索引處插入數組的元素

[3,4].concat(_ref = [-3, -4, -5, -6])通過將兩個數組連接在一起來計算數組,給出[3, 4, -3, -4, -5, -6] 這是傳遞給.apply() ,因此:

  1. index == 3(從索引3開始)
  2. howMany == 4(刪除4個元素)
  3. element1,...,elementN == -3,-4,-5,-6(刪除后要在索引3處插入的元素)

因此.apply()導致.splice()函數在numbers數組的上下文中運行,刪除索引3,4,5和6處的元素,然后插入元素-3,-4,-5和 -原始數組中的“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, 4, -3, -4, -5, -6][].splice.apply(numbers, [3, 4, -3, -4, -5, -6]))numbers.splice(3, 4, -3, -4, -5, -6)導致4個元素從索引3開始要刪除並將元素“-3,-4,-5,-6”插入索引3.參見拼接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM