js数组根据对象属性去重

数组由多个对象组成,我需要根据对象的某一属性来判断,得到每个数组元素的该属性值不重复的新数组

实例

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
// 参数1:需要去重的数组;参数2:根据哪个属性去重
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
,