Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无索引javascript数组拼接_Javascript_Arrays_Array Splice - Fatal编程技术网

无索引javascript数组拼接

无索引javascript数组拼接,javascript,arrays,array-splice,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); 从中,结果是[0,1,2,-3,-4,-5,-6,7,8,9] 有人能解释一下吗?[3,4].concat(_ref=[-3,-4,-5,-6])evals to[3,4,-3,

我想知道这段代码:

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]
有人能解释一下吗?

[3,4].concat(_ref=[-3,-4,-5,-6])
evals to
[3,4,-3,-4,-5,-6]
[3,4,-4,-4,-4,-5,-6]
导致从索引3中删除4个元素,并将这些元素-3,-4,-5,-6添加到
在索引3处插入。请参阅。

函数。应用(上下文,argsArray)在给定上下文中调用函数,并将argsArray作为函数的参数传递

在这种情况下,函数为
[]。splice
,它按以下顺序接受以下参数:

  • 索引-开始更改数组的位置
  • 从索引开始删除的元素数量
  • element1,…,elementN—要在索引处插入数组的元素
  • [3,4].concat(_ref=[-3,-4,-5,-6])
    通过将两个数组连接在一起来计算数组,给出
    [3,4,-3,-4,-5,-6]
    。这是传递给
    .apply()
    的argsArray,以便:

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


    编辑:请参阅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);
    

    不管是谁给出了-1,请解释一下原因?如果您想要的是一个易于使用的函数,那么请在下面的答案中签出
    insertArrayAt()