16

我真的很困惑。

我的理解是,这array.splice(startIndex, deleteLength, insertThing)会插入insertThingsplice()atstartIndex和 deletedeleteLength的条目价值中吗?... 所以:

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/

谢谢 :)

4

4 回答 4

24

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

于 2011-09-22T16:08:45.267 回答
6

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);   // []

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

于 2011-09-22T16:10:29.653 回答
4

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

我想这就是你想要的。

var a = [1,2,3,4,5]; 
a.splice(1, 0, 'foo'); 
var b = a;
console.log(b); 
于 2011-09-22T16:10:10.097 回答
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"]
于 2021-02-22T00:41:35.807 回答