从数组javascript中删除值[重复]

Posted

技术标签:

【中文标题】从数组javascript中删除值[重复]【英文标题】:Remove value from array javascript [duplicate] 【发布时间】:2016-09-15 04:58:42 【问题描述】:

我有一个数组 javascript 和一个字符串:

var pool1 = ['ca','cahier','cartable','carte','cartographe','canape'];
var key1 = 'car';

我想要做的是,从数组中删除所有不包含 key1 的值。

为此,我编写了这个函数:

function searchInPool(key, pool)
    for (i = 0; i < pool.length; i++) 
        var index = pool[i].indexOf(key);
        if (index > -1) 
            pool.splice(index, 1);
        
    
    return pool;

它似乎工作,除了最终结果给我:

["cartable", "carte", "cartographe", "canape"]

它已成功删除 cacahiercanape 不应该在这里,因为它不包含 car 任何人都可以向我解释我在函数中所写的内容中误解了什么?

预期的最终结果是:

["cartable", "carte", "cartographe"]

非常感谢

【问题讨论】:

你应该反转你的循环for (var i = pool.length - 1; i &gt;= 0; i--) ,因为这样你会考虑到你的例子中没有发生的数组的缩短长度。 你用index调用splice(),也就是key1在字符串中的位置。这对我来说似乎是错误的。 由于答案已关闭,我无法发布答案。但是您的代码的问题是:1)您在循环遍历数组时更改了数组pool,这会产生奇怪的结果;2)用于删除项目的索引是您的代码找到字符串的索引@987654335 @,它应该是数组中项目的索引,并且 3) 检查 (index &gt; -1) 实际上会尝试删除其中确实包含 car 的项目。其他两个项目被正确移除并且正确的项目留在里面,这真的是纯粹的运气。 @Barmar 我会投票重新提出这个问题。 OP的问题不是如何从数组中删除项目(所以不重复),而是“解释我误解了什么”。也许这个问题比 SO 更适合 Code Review,但我不认为是重复的。也许 OP 也可以考虑他的意见。 【参考方案1】:

您可以使用Array#filter

array.filter(e => !e.includes(key));

var pool1 = ['ca', 'cahier', 'cartable', 'carte', 'cartographe', 'canape'];
var key1 = 'car';

var result = pool1.filter(e => !e.includes(key1));
console.log(result);

ES5:

var result = pool1.filter(function(el) 
    return el.indexOf(key1) === -1;
);

【讨论】:

Array#filter 在所有浏览器中都可用吗?如何检查它是否根据浏览器版本工作? @A.L Browser Compatibility。为了支持旧版浏览器,应该使用 ES5 方法。 @A.L 所有浏览器,包括 IE9+。 IE8及以下不兼容本规范 我似乎不太了解他的 ES5 方法,它正在工作,但与我需要的相反,不知道如何扭转它:/ @Nirnae return el.indexOf(key1) !== -1; result 是您应该使用的数组。

以上是关于从数组javascript中删除值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 JS 数组中删除重复值 [重复]

Javascript - 按值删除数组项[重复]

从数组中删除重复元素[重复]

使用 JavaScript 从数组中删除所有重复项 [重复]

javascript 从javascript中的对象数组中删除重复项

javascript 从数组中删除重复项