与javascript array.splice()混淆

Tro*_*sic 11 javascript array-splice

我真的很困惑.

我的理解是,array.splice(startIndex, deleteLength, insertThing)将插入insertThing到的结果splice()startIndex和删除deleteLength值得条目?......所以:

var a = [1,2,3,4,5];
var b = a.splice(1, 0, 'foo');
console.log(b);
Run Code Online (Sandbox Code Playgroud)

应该给我:

[1,'foo',2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

console.log([1,2,3,4,5].splice(2, 0, 'foo'));
Run Code Online (Sandbox Code Playgroud)

应该给我

[1,2,'foo',3,4,5]
Run Code Online (Sandbox Code Playgroud)

等等

但由于某种原因,它给了我一个空阵列?看看:http://jsfiddle.net/trolleymusic/STmbp/3/

谢谢 :)

Poi*_*nty 15

"splice()"函数不返回受影响的数组,而是返回已删除元素的数组.如果不删除任何内容,则结果数组为空.

  • @Trolleymusic,我知道那种感觉 (2认同)

Pet*_*son 5

array.splice函数拼接一个数组并返回被删除的元素。由于您没有删除任何内容而只是使用它来插入元素,因此它将返回空数组。

我想这就是你想要的。

var a = [1,2,3,4,5]; 
a.splice(1, 0, 'foo'); 
var b = a;
console.log(b); 
Run Code Online (Sandbox Code Playgroud)


jfr*_*d00 5

splice()修改源数组并返回已删除项的数组。由于您没有要求删除任何项目,因此您会返回一个空数组。它修改原始数组以插入您的新项目。你有没有看一看它是什么?在 中查找您的结果a

var a = [1,2,3,4,5];
var b = a.splice(1, 0, 'foo');
console.log(a);   // [1,'foo',2,3,4,5]
console.log(b);   // []
Run Code Online (Sandbox Code Playgroud)

在您的 jsFiddle 的派生中,请在a此处查看结果:http : //jsfiddle.net/jfriend00/9cHre/