从数组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"]
它已成功删除 ca
和 cahier
但 canape
不应该在这里,因为它不包含 car
任何人都可以向我解释我在函数中所写的内容中误解了什么?
预期的最终结果是:
["cartable", "carte", "cartographe"]
非常感谢
【问题讨论】:
你应该反转你的循环for (var i = pool.length - 1; i >= 0; i--)
,因为这样你会考虑到你的例子中没有发生的数组的缩短长度。
你用index
调用splice()
,也就是key1
在字符串中的位置。这对我来说似乎是错误的。
由于答案已关闭,我无法发布答案。但是您的代码的问题是:1)您在循环遍历数组时更改了数组pool
,这会产生奇怪的结果;2)用于删除项目的索引是您的代码找到字符串的索引@987654335 @,它应该是数组中项目的索引,并且 3) 检查 (index > -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中删除值[重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 JavaScript 从数组中删除所有重复项 [重复]