之前用的方法:
for(var i=0;i<arr1.length;i++){
for(var i=j ; j<arr2.length;j++){
if(arr1[i].code===arr2[j].goodscode){
arr.splice(i,1)
}
}
}
console.log(arr1)
此方法看上去没什么问题,这里arr1在变化,而arr2是不变的,
在循环时,当arr1中 i=0时,j++,当碰到相同项时arr1数组会变化,循环会重新开始,下一次循环时还是i=0,而内层循环却不会从0开始 j 继续++,从而导致过滤出错。
修改后的方法:
let result = []
for (var i = 0; i < arr1.length; i++) {
var item = data[i]
var repeat = false
for (var j = 0; j < arr2.length; j++) {
if (item.code === arr2[j].goodsCode) {
repeat = true
break
}
}
if (!repeat) {
result.push(item)
}
}
这里两个数组都不会变化,当检测到相同项是,内层循环会break,而外层循环继续++,
这里利用开关将非相同项放入一个新的数组,从而解决问题。