【问题标题】:Remove a range of elements from an array从数组中删除一系列元素
【发布时间】:2018-02-22 05:35:22
【问题描述】:

我想从array 中删除一系列元素:

var fruits = ["Banana", "Orange1", "Apple", "Banana", "Orange", "Banana", "Orange", "Mango", "Bananax", "Orangex"];
var a = fruits.indexOf("Apple");
var b = fruits.indexOf("Mango");

var removedCars = fruits.splice(a, b);

console.log(fruits);

所以我期待:

["Banana", "Orange1", "Bananax", "Orangex"]

但结果是:

["Banana", "Orange1", "Orangex"]

为什么会这样?

有没有更快更好的方法?

【问题讨论】:

  • 您没有正确使用拼接功能。第一个参数定义项目数,第二个参数是起始索引。
  • array.splice(start, deleteCount) 第二个参数不是索引。

标签: javascript arrays object splice


【解决方案1】:

Array.prototype.splice() 方法的第二个参数是要移除的元素个数,而不是结束索引。

从Array.prototype.splice() MDN Reference可以看出:

参数

start 开始更改数组的索引(原点为 0)。如果 大于数组的长度,实际的起始索引将是 设置为数组的长度。如果为负,将开始那么多 数组末尾的元素(原点为 1)并将设置为 如果绝对值大于数组的长度,则为 0。

deleteCount 可选 一个整数,表示旧数组的个数 要删除的元素。如果 deleteCount 为 0,则不删除任何元素。在 在这种情况下,您应该至少指定一个新元素。如果删除计数 大于数组中剩余的元素数,从 开始,那么到数组末尾的所有元素都将是 已删除。

解决方案:

你需要计算这两个索引之间的元素个数,所以使用b-a+1得到正确的计数。

演示:

这应该是你的代码:

var fruits = ["Banana", "Orange1", "Apple", "Banana", "Orange", "Banana", "Orange", "Mango", "Bananax", "Orangex"];
var a = fruits.indexOf("Apple");
var b = fruits.indexOf("Mango");

var removedFruits = fruits.splice(a, b-a+1);

console.log(fruits);

【讨论】:

    【解决方案2】:

    这是使用过滤器的一种方法:

    var fruits = ["Banana", "Orange1", "Apple", "Banana", "Orange", "Banana", "Orange", "Mango", "Bananax", "Orangex"];
    var a = fruits.indexOf("Apple");
    var b = fruits.indexOf("Mango");
    
    //returns items not equal to a or b
    function fruitfilter(item, index){
    return index !== a && index !== b;
    }
    
    //apply the filter to the array, returns a new array
    var newfruits = fruits.filter(fruitfilter);
     //log the new fruits
    console.log(newfruits);
    

    这是一个 jsfiddle:link

    【讨论】:

      【解决方案3】:

      发生这种情况是因为 array.splice() 采用第一个索引和要删除的元素数而不是最后一个索引 试试看

      fruits.splice(a, b - a + 1);
      

      【讨论】:

        猜你喜欢
        • 2015-09-14
        • 1970-01-01
        • 2019-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-27
        • 2018-11-16
        相关资源
        最近更新 更多