多种实现JavaScript数组去重的方法(包括对象数组)
最编程
2024-02-02 07:54:23
...
一、普通数组去重
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])) { // 如果有该key值
map.set(arr[i], true);
} else {
map.set(arr[i], false); // 如果没有该key值
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 = {}
//遍历对象,并将key进行排序
Object.keys(obj).sort().map(key => {
newObj[key] = obj[key]
})
//将排序好的数组转成字符串
return JSON.stringify(newObj)
}
- 遍历数组利用Set将转为字符串后的对象去重
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
}
更多
- Web开发知识点总结
参考文章
JavaScript数组去重(12种方法,史上最全)
上一篇: 用JavaScript的新Set方法删除数组重复项
下一篇: 5种简单易懂的JS数组对象去重方法