【发布时间】:2020-02-12 16:07:21
【问题描述】:
预期输出:['jan']
实际输出:['jan', 'apple']
forEach 函数在拼接操作后停止。
注释代码按预期工作,但是当我尝试使用 foreach 类似时,代码没有按预期工作。
var mainArr = ['jan', 'feb', 'apple'];
var exArr = ['feb', 'apple'];
removeGivenArr(mainArr, exArr);
function removeGivenArr(mainArr, exArr) {
mainArr.forEach((item, index) => {
if (exArr.includes(item)) {
console.log(item);
mainArr.splice(index, 1);
}
console.log(mainArr);
});
}
// function removeGivenArr(mainArr, exArr){
// const output = [];
// for(let element of mainArr){
// if(!exArr.includes(element)){
// output.push(element);
// }
// return output;
// }
// }
【问题讨论】:
-
您在迭代数组时正在修改它。
-
你最好在
mainArr上使用.filter()来创建一个新数组。 -
@Amy 但是下面的代码也是一样的。在迭代同一个数组时修改 var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]; for( var i = 0; i [1, 2, 3, 4, 6, 7, 8, 9, 0]
-
@Nash 因为那仍在更改数组的内容...也许您应该查看
splice的文档?
标签: javascript arrays foreach splice