1

可能重复:
在某些索引处删除/删除数组中的值

如何使用 Javascript 从给定索引处的数组中删除一组元素。

假设我有一个索引数组:

var indices = [0, 1, 3].

我想从另一个数组中删除这些给定的元素indices。另一个数组恰好是:

var cars = ["Cow", "Dog", "Ferrari", "Monkey", "Ford"].

所以,删除后我想从cars数组中删除“Cow”、“Dog”、“Monkey”

我试过这样的splice方法:

for(var i = 0; i < indices.length; i++){
   cars.splice(indices[i], 1);
}

但是这段代码碰巧cars每次拼接一个项目时都会改变数组的索引!

4

4 回答 4

2

尝试这个

var cars = ["Cow", "Dog", "Ferrari", "Monkey", "Ford"];
console.log(cars);

cars.each(function(val, index){
    // You can use jQuery inArray also.  
    //For Ex: if(jQuery.inArray(index, indices)){........}
    if(val=="Cow" || val=="Dog" || val=="Monkey" ){
        cars.splice(index, 1);
    }
});
console.log(cars);

JAVASCRIPT:然后使用.forEach代替.each

于 2012-12-27T06:28:41.220 回答
1

您可以从最后一个元素开始:

for(var i = indices.length-1; i >= 0; i--){
   cars.splice(indices[i], 1);
}
于 2012-12-27T05:01:23.730 回答
0

您可以delete在不修改索引的情况下删除元素。

var a = [1, 2, 3, 4, 5];
delete a[2]; // deletes '3'
console.log(a); // prints [1, 2, undefined, 4, 5]

您可以使用splice()删除元素并移动其余元素以填充已删除的索引

var b = [1, 2, 3, 4, 5];
b.splice(2, 1); // deletes '3' and shifts the rest to left
console.log(b); // prints [1, 2, 4, 5]
于 2012-12-27T05:31:10.787 回答
-1

Splice 方法完全删除项目,所以正如你所说“但是每次拼接项目时,这段代码都会改变汽车对象的索引!” 它将严格删除元素。如果要保持相同的数组索引,您可以使用命名约定 id 作为“已删除”或任何熟悉的命名 id 而不是删除(删除)元素

for(var i = 0; i < indices.length; i++){ car​​s[indices[i]] = "Deleted"; }

有了这个,您可以根据需要维护相同的数组索引。

请你解释为什么 -1 ?它不是应得的,或证明它是正当的。

于 2012-12-27T05:06:30.870 回答