一、普通数组去重
1.最方便的方法(利用ES6 的Set)
function unique (arr) {
return [...new Set(arr)]
}
2.利用filter
function unique(arr) {
return arr.filter(function(item, index, arr) {
return arr.indexOf(item, 0) === index;
});
}
3.利用Map数据结构去重
function unique(arr) {
let map = new Map();
let array = new Array();
for (let i = 0; i < arr.length; i++) {
if(map.has(arr[i])) {
map.set(arr[i], true);
} else {
map.set(arr[i], false);
array.push(arr[i]);
}
}
return array ;
}
二、对象数组去重(升级版)
[{a:1,b:2,c:3},{b:2,c:3,a:1},{d:2,c:2}]
[{a:1,b:2,c:3},{d:2,c:2}]
- 首先写一个函数把对象中的key排序,然后再转成字符串
function objSort(obj){
let newObj = {}
Object.keys(obj).sort().map(key => {
newObj[key] = obj[key]
})
return JSON.stringify(newObj)
}
function unique(arr){
let set = new Set();
for(let i=0;i<arr.length;i++){
let str = objSort(arr[i])
set.add(str)
}
arr = [...set].map(item => {
return JSON.parse(item)
})
return arr
}
更多
参考文章