Please enable java script to visit.
NOTEBOOK
HOMEPHP / MySQLJS / HTMLWXappPythonC++Blender其他
js 数组去重复,包含对象的数组去重复 - NOTEBOOK
js 数组去重复,包含对象的数组去重复
JS / HTML
Posted on 2023-03-04
摘要 : filter()方法和indexOf()方法。
指定对象中某个元素作为判断重复的指标。
使用filter和Map/使用reduce。
❱ 最简单的数组去重复

可以借用数组的 filter()方法和indexOf()方法,由于 indexOf(item) 返回的是数组中第一个item的索引,所以可以借此实现数组元素去重的功能。
const names = ['张三', '李四', '张三'];

function getUnique(arr) {
return arr.filter((item, index) => arr.indexOf(item) === index)
}

getUnique(names); // ["张三", "李四"]





❱ 简单地去除数组中重复的对象

但注意,如果对象中的元素前后顺序不一样时,虽然数据内容是一样的,但就会被认为是不重复的。
// getUnique 去重复
function getUnique(arr) {
const map = {};
// 1、把数组元素作为对象的键存起来(这样就算有重复的元素,也会相互替换掉)
arr.foreach(item => map[JSON.stringify(item)] = item);
// 2、再把对象的值抽成一个数组返回即为不重复的集合
return Object.keys(map).map(key => map[key])
}




❱ 指定对象中某个元素作为判断重复的指标

❱ 使用filter和Map

function uniqueFunc(arr, uniId){
const res = new Map();
return arr.filter((item) => !res.has(item[uniId]) && res.set(item[uniId], 1));
}

// 作者:光年之外_宇
//链接:https://juejin.cn/post/6984625612937773070
// 来源:稀土掘金
//著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


❱ 使用reduce

代码稍多,平均耗费时间和第一不分伯仲,四星推荐
function uniqueFunc2(arr, uniId){
let hash = {}
return arr.reduce((accum,item) => {
hash[item[uniId]] ? '' : hash[item[uniId]] = true && accum.push(item)
return accum
},[])
}

// 作者:光年之外_宇
//链接:https://juejin.cn/post/6984625612937773070
// 来源:稀土掘金
//著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。







从一个数组中删除重复对象