【发布时间】:2014-03-15 17:15:21
【问题描述】:
我有这段代码应该遍历数组中的每个项目,根据某些条件删除项目:
//iterate over all items in an array
//if the item is "b", remove it.
var array = ["a", "b", "c"];
array.forEach(function(item) {
if(item === "b") {
array.splice(array.indexOf(item), 1);
}
console.log(item);
});
期望的输出:
a
b
c
实际输出:
a
b
显然,原生 forEach 方法不会在每次迭代后检查项目是否已被删除,因此如果是,则跳过下一个项目。除了重写 forEach 方法或实现我自己的类来代替数组之外,还有更好的方法吗?
编辑 - 根据我的评论,我想解决方案是只使用标准 for 循环。如果您有更好的方法,请随时回答。
【问题讨论】:
-
其实我明白他们为什么不尝试支持这个功能 - 你需要检查删除的项目是否是当前项目,否则你可能会不必要地向后跳过(例如,如果检查只是基于长度是否减少了一个或什么)。实施起来似乎太复杂了。
标签: javascript arrays foreach