【问题标题】:Remove value from array javascript [duplicate]从数组javascript中删除值[重复]
【发布时间】: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 也可以考虑他的意见。

标签: javascript arrays loops


【解决方案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 是您应该使用的数组。
猜你喜欢
  • 1970-01-01
  • 2018-01-08
  • 2013-08-03
  • 2014-10-10
  • 2019-10-19
  • 2021-07-29
  • 2021-04-02
相关资源
最近更新 更多