// 基于单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; }标签:总结,obj1,arr,return,数组,res,item,key,方法 From: https://www.cnblogs.com/mengff/p/17449133.html