从 Javascript/jQuery 中的数组中删除多个元素

2022-08-30 02:29:46

我有两个数组。第一个数组包含一些值,而第二个数组包含应从第一个数组中删除的值的索引。例如:

var valuesArr = new Array("v1","v2","v3","v4","v5");   
var removeValFromIndex = new Array(0,2,4);

我想从中删除索引中存在的值。我认为本机方法可能会有所帮助,所以我想出了:0,2,4valuesArrsplice

$.each(removeValFromIndex,function(index,value){
    valuesArr.splice(value,1);
});

但它不起作用,因为在每一个之后,值的指数是不同的。我可以通过使用临时数组并将所有值复制到第二个数组来解决此问题,但是我想知道是否有任何本机方法可以将多个索引传递给该方法以从数组中删除值。splicevaluesArr

我更喜欢jQuery解决方案。(不确定我是否可以在这里使用)grep


答案 1

总是有一个普通的旧循环:for

var valuesArr = ["v1","v2","v3","v4","v5"],
    removeValFromIndex = [0,2,4];    

for (var i = removeValFromIndex.length -1; i >= 0; i--)
   valuesArr.splice(removeValFromIndex[i],1);

以相反的顺序进行,您可以不弄乱尚未删除的项目的索引。removeValFromIndex.splice()

请注意,在上面,我使用了带有方括号的数组文本语法来声明两个数组。这是推荐的语法,因为使用可能会造成混淆,因为它的响应方式不同,具体取决于传入的参数数量。new Array()

编辑:刚刚看到您对另一个关于索引数组不一定按任何特定顺序排列的答案的评论。如果是这种情况,请在开始之前将其按降序排序:

removeValFromIndex.sort(function(a,b){ return b - a; });

并遵循您喜欢的任何循环/ / 等方法。$.each()


答案 2

我建议你使用Array.prototype.filter。

var valuesArr = ["v1","v2","v3","v4","v5"];
var removeValFrom = [0, 2, 4];
valuesArr = valuesArr.filter(function(value, index) {
     return removeValFrom.indexOf(index) == -1;
})