今天在学习算法时遇到了二维数组去重问题,当即采用Set去重,发现并不起效果
let two = [ [ 2, 2, 3 ], [ 2, 2, 3 ], [ 2, 2, 3 ], [ 7 ] ]
console.log(...new Set(two));//[ 2, 2, 3 ] [ 2, 2, 3 ] [ 2, 2, 3 ] [ 7 ]
console.log(two[0]==two[1]);//false
原因是Set去重是比较数组中存入的值,当数组内值为简单数据类型,存入的就是值本身。比较的就是值本身。而二维数组存入的值为地址值,即使存入的相同,地址值也会不同。所以无法使用Set来进行去重。
解决办法:
利用对象的不可重复性
let two = [ [ 2, 2, 3 ], [ 2, 2, 3 ], [ 2, 2, 3 ], [ 7 ] ]
let obj = {}
two.forEach((val)=>{
// 此处不能用 obj.name = '属性值'的方式 因为此处的val是变量,不是固定值
obj[val] = val
})
two = []
for(let key in obj){
two.push(key.split(',').map(Number))
}
console.log(two);//[ [ 7 ], [ 2, 2, 3 ] ]