ES6 新增的Set可以用来做简单数据的去重,如[1,2,2,3,4]或['a','b','b','c']
那如果要进行对象去重呢?
1、如果只是简单的比较一个字段的值是否相同,可以用reduce,也可以用其它遍历的方式,很容易实现
2、如果要比较所有key和value都相同来进行去重,则可以用以下非常简洁的方法:
// 思路:把对象转为json字符串,通过set来去重
// 但因为每个对象的key是没有排序的,谁先赋值就谁排在前面,故需要先转为key排序的对象
removeDuplicateObject(objs) {
let jsons = objs.map(item => {
let keys = Object.keys(item).sort()
let obj = {}
keys.forEach(key => {
obj[key] = item[key]
})
return JSON.stringify(obj)
})
return [...new Set(jsons)].map(item => JSON.parse(item))
}