没有索引的javascript数组拼接

时间:2011-11-22 11:53:05

标签: javascript arrays array-splice

我想知道这段代码:

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);

here开始,结果为[0, 1, 2, -3, -4, -5, -6, 7, 8, 9] 任何人都能解释一下这个吗?

3 个答案:

答案 0 :(得分:1)

function .apply(context,argsArray)在给定的上下文中调用 function ,传递argsArray作为 function 的参数。

在这种情况下, function [].splice,它按以下顺序采用以下参数:

  1. index - 开始更改数组
  2. howMany - 要删除的元素,从 index 开始
  3. element1,...,elementN - 在 index 中插入数组的元素
  4. [3,4].concat(_ref = [-3, -4, -5, -6])通过将两个数组连接在一起来计算数组,给出[3, 4, -3, -4, -5, -6]。这是传递给.apply()的argsArray,因此:

    1. index == 3(从索引3开始)
    2. howMany == 4(删除4个元素)
    3. element1,...,elementN == -3,-4,-5,-6(删除后在索引3处插入的元素)
    4. 因此.apply()导致.splice()函数在numbers数组的上下文中运行,删除索引3,4,5和6处的元素,然后插入元素 - 原始数组中“2”和“7”之间的3,-4,-5和-6。

      编辑:请参阅RobG的答案,了解原始代码等同的内容(而不是对其各部分的解释)。

答案 1 :(得分:1)

您的代码解析为以下变量声明:

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);

答案 2 :(得分:0)

[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),导致从索引3开始的4个元素被删除,元素“-3,-4,-5, -6“将插入索引3.见splice