数组由多个对象组成,我需要根据对象的某一属性来判断,得到每个数组元素的该属性值不重复的新数组
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| let arr = [ {a:'1',b:'2'}, {a:'22',b:'33'}, {a:'123',b:'456'}, {a:'1',b:'666'}, {a:'123',b:'168'}, ] // 根据a来给arr去重,a值相同时只保存一条数据 function unique(arr){ const map = new Map(); return arr.filter((item)=> !map.has(item.a) && map.set( item.a, 1 )) } let res = unique(arr) console.log(res) // Array [Object { a: "1", b: "2" }, Object { a: "22", b: "33" }, Object { a: "123", b: "456" }]
|
- 注意:最后得到的是数组不是map对象,map只是在判断是否重复中帮忙用的!
封装方法
1 2 3 4 5 6 7
| function unique(arr,val){ const map = new Map(); return arr.filter((item)=> !map.has(item[val]) && map.set( item[val], 1 )) }
let uniqueArr = unique(arr,'a')
|
参考知识点
Map
Map.prototype.has()
Map.prototype.has()
返回一个布尔值,用来表明map 中是否存在指定元素.
- MDN
Map.prototype.set(key, value)
Map.prototype.set(key, value)
为 Map 对象添加或更新一个指定了键(key)和值(value)的(新)键值对。
- MDN