JavaScript - 从数组中删除一系列元素

时间:2017-09-13 13:18:04

标签: javascript arrays splice

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

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"]

为什么会这样?

有没有更快更好的方法呢?

3 个答案:

答案 0 :(得分:5)

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

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

  

<强>参数

     

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

     

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

<强>解决方案:

您需要计算这两个索引之间的元素数量,因此请使用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);

答案 1 :(得分: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);

这是一个小伙伴:link

答案 2 :(得分:0)

这是因为array.splice()获取第一个索引和要删除的元素数而不是最后一个索引 试试那个

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