js数组对象去重

1.使用Set
可以使用Set来实现数组对象的去重,Set是一种不重复元素的集合。我们可以将数组对象中的每个元素转化为一个字符串,然后将这些字符串放入Set中,最后将Set转化为数组即可。

示例代码:

const arr = [
  {id: 1, name: 'John'},
  {id: 2, name: 'Jane'},
  {id: 1, name: 'John'},
  {id: 3, name: 'Bob'},
  {id: 2, name: 'Jane'}
];

const set = new Set(arr.map(JSON.stringify));
const uniqueArr = Array.from(set).map(JSON.parse);

console.log(uniqueArr);
// Output: [{id: 1, name: 'John'}, {id: 2, name: 'Jane'}, {id: 3, name: 'Bob'}]

2.使用reduce
可以使用reduce方法遍历数组对象,并将每个对象的id属性作为key,将对象本身作为value存储到一个对象中。最后,将这个对象中的value部分转换为数组即可。

示例代码:

const arr = [
  {id: 1, name: 'John'},
  {id: 2, name: 'Jane'},
  {id: 1, name: 'John'},
  {id: 3, name: 'Bob'},
  {id: 2, name: 'Jane'}
];

const uniqueArr = Object.values(arr.reduce((acc, cur) => {
  acc[cur.id] = cur;
  return acc;
}, {}));

console.log(uniqueArr);
// Output: [{id: 1, name: 'John'}, {id: 2, name: 'Jane'}, {id: 3, name: 'Bob'}]

3.使用filter
可以使用filter方法遍历数组对象,并通过判断对象的id属性在数组中的位置是否为当前位置,来决定是否保留该对象。

示例代码:

const arr = [
  {id: 1, name: 'John'},
  {id: 2, name: 'Jane'},
  {id: 1, name: 'John'},
  {id: 3, name: 'Bob'},
  {id: 2, name: 'Jane'}
];

const uniqueArr = arr.filter((item, index, arr) => {
  return arr.findIndex(t => t.id === item.id) === index;
});

console.log(uniqueArr);
// Output: [{id: 1, name: 'John'}, {id: 2, name: 'Jane'}, {id: 3, name: 'Bob'}]

4.使用Map也可以实现对数组对象的去重。与使用Set类似,我们可以将每个数组对象中的id属性作为Map中的key,将对象本身作为value存储到Map中。如果遇到重复的key,则更新Map中对应的value值

示例代码:

const arr = [
  {id: 1, name: 'John'},
  {id: 2, name: 'Jane'},
  {id: 1, name: 'John'},
  {id: 3, name: 'Bob'},
  {id: 2, name: 'Jane'}
];

const map = new Map();
arr.forEach(item => map.set(item.id, item));

const uniqueArr = Array.from(map.values());

console.log(uniqueArr);
// Output: [{id: 1, name: 'John'}, {id: 2, name: 'Jane'}, {id: 3, name: 'Bob'}]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容