无索引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()