数组对象去重
数组对象就是数组里的每一项都是一个对象,例:
//需要去重的数组对象(每个对象都有唯一标识) oldArr = [ { id: 01, name: "John" }, { id: 02, name: "Doe" }, { id: 02, name: "Doe" }, { id: 03, name: "Lisa" }, { id: 04, name: "Jane" }, { id: 03, name: "Lisa" }, { id: 02, name: "Doe" }, { id: 05, name: "Eve" }, ]; //想要达到的结果 newArr = [ { id: 01, name: "John" }, { id: 02, name: "Doe" }, { id: 03, name: "Lisa" }, { id: 04, name: "Jane" }, { id: 05, name: "Eve" }, ];
几种数组对象去重的方法
1、对象访问属性的方法
总体思路:新建一个辅助对象unique,用原数组中的每个对象的唯一标识作为新对象unique的key,根据unique的key判断
function getObjectUnique(arr) { let newArr = []; //去重后的数组 let unique = {}; arr.forEach((item) => { if (!unique[item.id]) { //当数组内对象的唯一标识id不在对象unique里面就将该对象添加到newArr中 newArr.push(item); //将对象的唯一标识id作为unique对象的key,value为true unique[item.id] = true; } }); return newArr; }
2、Map方法
总体思路:set方法可以向Map对象添加新元素 map.set(key, value),然后返回整个Map结构。如果key已经有值,则键值会被更新,否则就新生成该键。values方法可以返回Map对象值的遍历器对象。
function getObjectUnique(arr) { let map = new Map(); for (let item of arr) { map.set(item.id, item); } const newArr = [...map.values()]; return newArr; }
3、双层循环
效率相对比较低,但是便于初学者理解
function getObjectUnique(arr) { for (let i = 0; i < arr.length; i++) { for (let j = i + 1; j < arr.length; j++) { if (arr[i].id == arr[j].id) { //将重复的对象删除 arr.splice(j, 1); j--; } } } return arr; }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226318.html原文链接:https://javaforall.net
