我是JS的新手,无法解决“ forEach”方法的问题。
为了帮助说明,假设我有2个数组。
第一个:包含字典中1000个随机单词的数组。
第二个:包含10个“停用词”(我要从第一个数组中过滤掉的词)的数组。
如果我坐下来编写一个带有这两个数组参数的函数,我的直觉会告诉我编写如下代码:
function cleanSet(theSet, stoppers){
for(var i=0;i<theSet.length;i++){
for(var j=0; j<stoppers.length;j++){
if(theSet[i] === stoppers[j]){
theSet.splice(i,1);
}
}
}
return theSet;
}
但是,当我在编写此程序时尝试使用forEach时,它不起作用:
function cleanerSet(theSet, stoppers){
theSet.forEach(function(setWord,i){
stoppers.forEach(function(stopper, j){
if(theSet[i] === stopper[j]){
theSet.splice(i,1);
}
});
});
return theSet;
}
为什么“ cleanerSet”不按“ cleanSet”的方式工作?
最佳答案
问题在于,拼接会改变您的数组,因此,请记住,如果从当前正在迭代的数组中删除一项,则不会重置索引。至于如何解决,@ Gyandeep提供了一个很好的解决方案。另外,在您的第一个实现中,我认为您可能是说:
theSet.splice(i,1);