昨天在写项目时碰到了在一个二维数组中过滤掉一维数组中的值,只取二维数组中剩下的值。刚开始的思路是用forEach循环两次这两个数组,排除掉这俩数组中相等的值,将剩下的值放入新的数组中。但在实际操作时却发现,这样并不会过滤掉相同的东西,它只是在当前这个循环中过滤掉,得到的最后的数组并没有去除与一维数组中相同的东西。
利用new Set()来进行数组去重,其方法如下:
getUnTage(arr1, arr2) {
const arr3 = arr2.map(item => item.id)
const arr4 = []
const aSet = new Set(arr1)
const bSet = new Set(arr3)
const difference = Array.from(new Set(arr1.concat(arr3).filter(v => !aSet.has(v) || !bSet.has(v))))
difference.forEach(item => {
arr2.forEach(item1 => {
if (item === item1.id) {
arr4.push(item1)
}
})
})
return arr4
}
先将二维数组变成一维数组,再利用new Set()可以求两个一维数组的差值的方法进行筛选,得到新的数组,即我们需要的结果。