【发布时间】:2018-04-01 02:21:10
【问题描述】:
我正在尝试使用以下方法过滤数组,但是,我有一个被跳过的值!
function filterArray(array,remove){
console.log('Array Length:',array.length)
console.log("Array:",array);
console.log('Remove:',remove);
console.log('------');
array.forEach(function(e){
if(remove.includes(e.serial)){
console.log('remove this item:',e);
array.splice(array.indexOf(e),1);
}
});
console.log('New Array Length:',array.length);
return array;
}
我不知道为什么会这样。有人能解释一下这种情况吗?
这是我的控制台输出
【问题讨论】:
-
为什么不直接使用
array.filter? -
如果您使用拼接删除当前数组元素,那么
next元素将成为当前元素,并且在您的 forEach 回调函数被调用之后发生的最后一件事是当前索引递增,因此你跳过下一个元素是什么 -
@EvanTrimboli -
array.splice改变数组,array.filter返回一个新数组 - 这可能不是代码的意图 -
可能,但该函数返回一个数组,因此您可以想象其意图不一定是在原地对其进行变异。
-
提示:有时
for loop是比 .forEach/.map/.filter/.etc 更好的工具
标签: javascript arrays foreach array-splice