实现对象数组去重的方法


# 实现对象数组去重的方法

# 功能描述

数组元素是对象,根据每个对象的某一个具体属性来进行去重。

# 手写实现

注意:该方法会返回一个新的去重后的数组。

利用高阶函数 reduce 进行去重,需要注意该函数的第二个参数 initialValue 得放一个空数组 [],不然没法 push

function distinct(objectArray, key) {
  return objectArray.reduce((acc, value) => {
    const keys = acc.map(item => item[key]);
    return keys.includes(value[key]) ? acc : [...acc, value];
  }, [])
}
1
2
3
4
5
6

# 测试用例

let data = [
  { name: "张三", age: "18" },
  { name: "张三", age: "19" },
  { name: "张三", age: "20" },
  { name: "李四", age: "19" },
  { name: "王五", age: "20" },
  { name: "赵六", age: "21" }
]

const result = distinct(data, 'name');
console.log(result);  // (4)[{…}, {…}, {…}, {…}]
1
2
3
4
5
6
7
8
9
10
11

(完)