我是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);

07-24 09:31