【发布时间】: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 也可以考虑他的意见。
标签: javascript arrays loops