为什么这两种循环得到的结果是不一样的
一个结果是1,4
,一个是1,3,4
var a = [1,2,3,4];
var b = [2,3];
function removePointById(arr1,arr2){
for(let i = 0; i < arr2.length; i++){
for(let j = 0; j < arr1.length; j++){
if(arr2[i]== arr1[j]){
let indexs = arr1.indexOf(arr1[j]);
arr1.splice(indexs, 1);
}
}
}
return arr1
},
console.log(removePointById(a,b))// 1,4
var a = [1,2,3,4];
var b = [2,3];
a.forEach((item,index)=>{
b.forEach((itx,idx)=>{
if(item == itx) {
a.splice(index,1);
}
})
})
console.log(a); // 1,3,4
永远不要在forEach里面 splice或者减少 数组长度,因为 forEach 函数中最开始已经确定长度了,虽然代码最终没有出错。
比方说 forEach 的游标已经到了第二个,但是你把第二个删除,第三个变为第二个,所以forEach游标继续走,到第三个,所以之前的第三个现在的第二个会被遗漏。
forEach的意思是遍历,不建议修改可以使用函数 filter 过滤 返回 判断,如果非要forEach,建议新增一个数组 push。
filter:
foreach: