使用 splice() 从数组中删除匹配条件的项目

Posted

技术标签:

【中文标题】使用 splice() 从数组中删除匹配条件的项目【英文标题】:Using splice() to remove items that matches condition from array 【发布时间】:2019-09-06 04:18:06 【问题描述】:

我试图通过 for 循环删除与状态数组中的条件匹配的所有项目。但它似乎只删除了数组中的最后一项,而不是匹配的项。我是否错误地使用了 .splice() ?提前致谢。代码是:

rmTravel() 
           for(var i = 0; i < this.cards.length; i++)
               if(this.cards[i].sg_categories.includes("travel"))
                   this.cards.splice(i, 1);
                   console.log('Removed following card:', this.cards[i].slug)
               
           
           console.log('Cards in cards state: ', this.cards)
       

【问题讨论】:

1. 如果splice() 应该从数组中删除一个项目,那么您的console.log() 调用是不是太晚了?您不应该在删除项目之前打印它吗? 2. 当您从数组中删除一个项目时,以下项目不会向数组的开头移动一个位置吗?如果是这样,您可能应该在删除后减少 i 以处理移动到已删除项目位置的项目。 【参考方案1】:

这是一个有点经典的问题;您正在向前迭代并同时缩小数组,因此您最终会跳过记录。

我建议改用Array.prototype.filter()

this.cards = this.cards.filter(( sg_categories ) => 
    !sg_categories.includes('travel'))

这会将数组减少为sg_categories 属性不包含“travel”的条目。

【讨论】:

太棒了。这就是我一直在寻找的。谢谢。

以上是关于使用 splice() 从数组中删除匹配条件的项目的主要内容,如果未能解决你的问题,请参考以下文章

splice

JS中的splice方法

如何在AngularJS中使用过滤器从数组中删除项目?

JavaScript方法splice()和slice()

JavaScript方法splice()和slice()

JS splice() 定义和用法