Javascript 阵列拼接在函数内未按预期工作

Javascript 阵列拼接在函数内未按预期工作,javascript,arrays,foreach,splice,Javascript,Arrays,Foreach,Splice,预期输出:['jan'] 实际输出:['jan','apple'] forEach功能在拼接操作后停止。 注释后的代码按预期工作,但当我尝试使用类似的foreach时,代码没有按预期工作 var mainArr=['jan','feb','apple']; var exArr=['feb','apple']; 拆卸器(主、排气器); 功能移除器(主、副){ mainArr.forEach((项目、索引)=>{ 如果(包括(项目)){ 控制台日志(项目); 主接头(索引1); } 控制台日志(m

预期输出:
['jan']

实际输出:
['jan','apple']

forEach
功能在拼接操作后停止。 注释后的代码按预期工作,但当我尝试使用类似的foreach时,代码没有按预期工作

var mainArr=['jan','feb','apple'];
var exArr=['feb','apple'];
拆卸器(主、排气器);
功能移除器(主、副){
mainArr.forEach((项目、索引)=>{
如果(包括(项目)){
控制台日志(项目);
主接头(索引1);
}
控制台日志(mainArr);
});
}
//功能移除器(主、副){
//常量输出=[];
//for(mainArr的let元素){
//如果(!exArr.includes(元素)){
//输出推送(元件);
//         }
//返回输出;
//     }   
//}
const mainArr=['jan','feb','apple'];
常量exArr=['feb','apple'];
常量过滤器RR=(主过滤器、exArr)=>{
返回主数组筛选器((字符)=>{
返回exArr.indexOf(char)=-1;
});
}

log(filterArr(mainArr,exArr))
为了保持与
mainArr
相同的对象引用,您可以从数组末尾迭代并删除不需要的部分,而不违反索引

function removegivenar(mainArr,exArr){
var i=主长度;
而(i--)if(例如包括(mainArr[i])mainArr.拼接(i,1);
}
var mainArr=['1月'、'2月'、'苹果'],
exArr=['feb','apple'];
拆卸器(主、排气器);
控制台日志(mainArr)有关更多信息,请阅读的答案

使用过滤器代替。
var mainArr=['jan','feb','apple'];
var exArr=['feb','apple'];
mainArr=拆卸器(mainArr,exArr);
控制台日志(mainArr)
功能移除器(主、副){
返回主数组筛选器((项目)=>!exArr.includes(项目))

}
forEach停止,因为拼接在适当的位置工作。实际数组发生变异,并将上一个索引降到1,直到迭代完成为止。

您在对数组进行迭代时正在修改该数组。最好使用
mainArr
上的
.filter()
创建一个新数组。@Amy但下面的代码也会这样做。在迭代相同数组var arr=[1,2,3,4,5,6,7,8,9,0]时进行修改;对于(var i=0;i[1,2,3,4,6,7,8,9,0]@Nash,因为这仍然在更改数组的内容。。。也许您应该看看
splice
的文档?这个解决方案看起来很完美!但是使用forEach而不是Array.prototype.filter()执行相同操作的任何方法;