You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从相似对象中创建唯一值数组?

合并多对象属性生成唯一值数组的实现方案

嘿,这个需求确实挺典型的,你想到用Set去重完全找对方向了!我来给你一步步拆解具体怎么实现,不管对象有多少个属性都能轻松处理~

核心思路

我们要做的其实就是三步:

  • 收集每个属性的所有值(包括重复和null的)
  • 过滤掉null(如果需要的话也可以顺带过滤undefined)
  • 用Set去重,再转回数组

具体实现

先看单个属性的处理

假设我们有一组结构相同的对象,先拿其中一个属性举例:

// 示例对象数组
const objects = [
  { prop1: 'a', prop2: 'b', prop3: null },
  { prop1: 'a', prop2: null, prop3: 'c' },
  { prop1: null, prop2: 'b', prop3: 'c' },
  { prop1: 'd', prop2: 'b', prop3: null }
];

// 提取prop1的唯一非null值
const uniqueProp1 = [...new Set(
  objects.map(obj => obj.prop1).filter(val => val !== null)
)];
// 结果:['a', 'd']

扩展到任意数量的属性

如果要批量处理所有属性,我们可以用Object.keys()获取所有属性名,再配合reduce来生成最终的结果对象:

// 先获取所有属性名(假设数组第一个对象的结构代表所有对象的结构)
const allPropNames = Object.keys(objects[0]);

// 批量处理每个属性
const uniquePropsResult = allPropNames.reduce((result, propName) => {
  // 收集当前属性的所有非null值,去重后转数组
  result[propName] = [...new Set(
    objects.map(obj => obj[propName]).filter(val => val !== null)
  )];
  return result;
}, {});

// 最终输出:
// {
//   prop1: ['a', 'd'],
//   prop2: ['b'],
//   prop3: ['c']
// }

一些优化点

  • 如果你的对象里可能存在undefined值,想一起过滤的话,可以把过滤条件改成val != null(注意是双等号,同时过滤null和undefined)
  • 如果对象数组可能为空,记得先做判断,比如:
    if (!objects.length) {
      console.log('对象数组为空,请检查输入');
      return {};
    }
    
  • 如果属性值是引用类型(比如对象),Set没法直接去重,这时候你需要先把引用类型转成可比较的原始值(比如JSON字符串),不过看你的需求应该是处理基本类型,这个暂时不用考虑~

这个方法我平时处理批量属性去重的时候经常用,不管是3个属性还是n个属性,都能快速搞定,而且代码也很简洁易懂。

内容的提问来源于stack exchange,提问作者Clay Banks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:05:28