对象数组去重

128 阅读1分钟

1、Reduce方法

const objects = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 1, name: 'Alice' }, // 重复对象
];

const uniqueObjects = objects.reduce((acc, current) => {
  const isDuplicate = acc.find(obj => obj.id === current.id && obj.name === current.name);
  if (!isDuplicate) {
    acc.push(current);
  }
  return acc;
}, []);

console.log(uniqueObjects);

2、JSON.stringfy + set + Object.assign

const objects = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 1, name: 'Alice' }, // 重复对象
];

const uniqueObjects = Array.from(new Set(objects.map(obj => JSON.stringify(Object.assign(obj, obj))))).map(str => JSON.parse(str));

console.log(uniqueObjects);

lodash

import _ from 'lodash';

const objects = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 1, name: 'Alice' }, // 重复对象
];

const uniqueObjects = _.uniqBy(objects, obj => `${obj.id}-${obj.name}`);

console.log(uniqueObjects);