JavaScript数组splice()函数的困惑

22

我真的很困惑。

我的理解是array.splice(startIndex, deleteLength, insertThing)会将insertThing插入到startIndex处并删除deleteLength个元素? ... 所以:

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

应该给我:

[1,'foo',2,3,4,5]

console.log([1,2,3,4,5].splice(2, 0, 'foo'));

应该给我

[1,2,'foo',3,4,5]

但是出于某种原因,它只给我一个空数组?看一下:http://jsfiddle.net/trolleymusic/STmbp/3/

谢谢 :)


2
正如一些人现在指出的那样 - 这个函数返回被移除的元素,但同时修改了数组。谢谢 :) ! - Trolleymusic
还有三个很好的答案 - 抱歉,我只标记了第一个回答为正确答案。感谢大家的帮助! - Trolleymusic
4个回答

31

“splice()”函数返回的不是受影响的数组,而是被移除元素的数组。如果您未移除任何元素,则结果数组为空。


9

splice()方法修改原始数组并返回被删除的元素数组。由于您没有请求删除任何元素,因此会返回一个空数组。它会修改原始数组以插入新的元素。您是否查看了a中的内容?请在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);   // []

在你的jsFiddle推导中,可以在此处a中查看结果:http://jsfiddle.net/jfriend00/9cHre/


5
array.splice函数用于删除数组中的元素,并返回被删除的元素。由于您并没有删除任何元素,而只是用它来插入一个元素,因此它将返回空数组。
我认为这就是您想要的。
var a = [1,2,3,4,5]; 
a.splice(1, 0, 'foo'); 
var b = a;
console.log(b); 

1
我曾经遇到过这个问题。"splice() 方法通过删除或替换现有元素和/或在原地添加新元素来更改数组的内容。" https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice 这将起作用:
var a = [1,2,3,4,5];
a.splice(1,0,'Foo');
console.log(a);

如果你想将它放在一个函数里,可以这样做:
function placeInMiddle(arr){
     
     arr.splice(2,0, "foo");
      return arr;
    
}  
placeInMiddle([1,2,6,7])

在Mozilla开发者网站上,Array.prototype.splice()页面比其他资源更清晰地介绍了splice方法的工作原理以及如何实现,以下简要描述!

const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// inserts at index 1
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "June"]

months.splice(4, 1, 'May');
// replaces 1 element at index 4
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "May"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接