
// 基于单key或无key去重,单key一般是对象的id,无key就是元素本身是非对象
export function uniqueArr(arr, key){
let res;
if(key){
res = [...new Map(arr.map(t => [t[key], t])).values()]
}
else{
res = [...new Set(arr)]
}
return res;
}
// 另一种基于单key的去重,基于Set
function uniqueArr(arr, key){
const res = new Set();
return arr.filter( item => !res.has(item[key]) && res.add(item[key]) );
}
// 非单key,对象进行全键比较,若对象内无特殊类型,且键顺序一致,则可以简单用JSON.stringify来比较
function uniqueArr(arr) {
const set = new Set();
return arr.filter((item) => {
const strItem = JSON.stringify(item);
if (set.has(strItem)) return false;
set.add(strItem);
return true;
});
}
// 非单key,对象进行全键比较,使用递归进行深比较
function uniqueArr(arr) {
return arr.filter((item, index) => {
return index === arr.findIndex(other => deepEqual(item, other));
})
}
function deepEqual(obj1, obj2) {
if (obj1 === obj2) return true;
if (typeof obj1 !== "object" || typeof obj2 !== "object" || obj1 === null || obj2 === null) {
return false;
}
const keys1 = Object.keys(obj1);
const keys2 = Object.keys(obj2);
if (keys1.length !== keys2.length) return false;
for (const key of keys1) {
if (!keys2.includes(key)) return false;
if (!deepEqual(obj1[key], obj2[key])) return false;
}
return true;
}

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具