js实现嵌套数组对象去重

答案:按属性去重可用mapreduce,多属性组合可拼接键值,深度去重可用jsON.stringify或lodash的isEqual,推荐根据数据结构选择方法。

js实现嵌套数组对象去重

javaScript 中,处理嵌套数组对象去重时,关键在于如何定义“重复”。通常我们认为两个对象的某个或某些属性值相同即为重复。下面以常见场景为例,介绍几种实用的去重方法。

1. 按单一属性去重

如果对象中有一个唯一标识字段(如 id),可以通过该字段进行去重。

使用 Mapreduce 方法按指定属性过滤重复项:

示例数据:
const arr = [
  { id: 1, name: ‘Alice’ },
  { id: 2, name: ‘Bob’ },
  { id: 1, name: ‘Alice’ }
];

方法一:使用 Map

const uniqueById = Array.from(
  new Map(arr.map(item => [item.id, item])).values()
);

方法二:使用 reduce

const uniqueById = arr.reduce((acc, curr) => {
  if (!acc.some(item => item.id === curr.id)) {
    acc.push(curr);
  }
  return acc;
}, []);

2. 按多个属性组合去重

当需要根据多个字段(如 id 和 name)共同判断是否重复时,可以将这些字段拼接成字符串作为唯一键。

示例: 根据 id 和 name 去重

const uniqueByKeys = Array.from(
  new Map(
    arr.map(item => [`${item.id}-${item.name}`, item])
  ).values()
);

这种方法适用于固定字段的精确匹配。

3. 深度去重(处理任意嵌套结构)

若对象结构复杂且需深度比较内容,可借助 json.stringify 配合 Set 实现,但注意顺序和类型必须一致。

js实现嵌套数组对象去重

腾讯智影-AI数字人

基于AI数字人能力,实现7*24小时AI数字人直播带货,低成本实现直播业务快速增增,全天智能在线直播

js实现嵌套数组对象去重 73

查看详情 js实现嵌套数组对象去重

简单实现:

const deepUnique = Array.from(
  new Set(arr.map(JSON.stringify)),
  JSON.parse
);

注意: 此方法对属性顺序敏感。例如 {a:1,b:2} 和 {b:2,a:1} 被视为不同对象。

如需真正深度比较,建议引入 lodash 的 isEqual,或自行实现递归对比函数。

4. 使用 lodash 简化操作

如果你项目中使用了 lodash,可以直接用 _.uniqBy 方法。

import { uniqBy } from ‘lodash’;
const result = uniqBy(arr, ‘id’);
// 多字段支持:uniqBy(arr, o => [o.id, o.name].join(‘-‘))

基本上就这些常用方式。选择哪种取决于你的数据结构和性能要求。对于小数据量,JSON.stringify 方便快捷;对于大数组或复杂逻辑,推荐使用 Map + 键映射的方式,效率更高。

上一篇
下一篇
text=ZqhQzanResources