【问题标题】:Confusion with javascript array.splice()与 javascript array.splice() 混淆
【发布时间】:2011-09-22 16:06:08
【问题描述】:

我真的很困惑。

我的理解是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);

应该给我:

[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/

谢谢:)

【问题讨论】:

  • 正如一些人现在指出的那样 - 该函数返回删除的元素,但修改了数组。谢谢:)!
  • 还有三个出色的答案 - 抱歉,我刚刚将第一个输入的答案标记为正确答案。感谢大家的帮助!

标签: javascript array-splice


【解决方案1】:

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

【讨论】:

  • @Trolleymusic,我知道这种感觉
【解决方案2】:

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/

【讨论】:

    【解决方案3】:

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

    我想这就是你想要的。

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

    【讨论】:

      【解决方案4】:

      我遇到了这个问题。 “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"]
      

      【讨论】: