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

如何从对象数组中创建含唯一键值对的对象数组?

提取数组中唯一的group字段并生成新数组

没问题,这有几种实用的JavaScript方法帮你实现需求,先提个小细节:你给出的原始samples写法有点问题,应该是数组而非对象(外层用[]包裹),不然代码会报错,我先修正了这个格式再演示方法~

方法1:利用Set快速去重(推荐,性能更优)

Set是JS里专门用来存储唯一值的结构,搭配map就能快速完成去重和格式转换:

// 修正后的原始数据
const samples = [
  { id: 2, group: 'picturesWithDescription', elements: [ { id: 1 }, { id: 2 } ] },
  { id: 3, group: 'footers', elements: [ { id: 1 }, { id: 2 } ] },
  { id: 4, group: 'movies', elements: [ { id: 1 }, { id: 2 } ] },
  { id: 4, group: 'movies', elements: [ { id: 1 }, { id: 2 } ] }
];

// 生成目标数组
const uniqueGroups = [...new Set(samples.map(item => item.group))].map(group => ({ group }));

console.log(uniqueGroups);
// 输出:[{group: 'picturesWithDescription'}, {group: 'footers'}, {group: 'movies'}]

步骤解释:

  • samples.map(item => item.group):先把所有元素的group值提取出来,得到一个包含重复值的数组
  • new Set(...):把这个数组传入Set,自动剔除重复的group值
  • [...new Set(...)]:把Set转回普通数组
  • .map(group => ({ group })):把每个group值转成你需要的{ group: xxx }格式的对象

方法2:用Reduce手动控制去重

如果需要更灵活的逻辑(比如后续要加其他判断条件),可以用reduce来一步步构建结果:

const uniqueGroups = samples.reduce((result, currentItem) => {
  // 检查当前group是否已经在结果数组里存在
  const isDuplicate = result.some(item => item.group === currentItem.group);
  if (!isDuplicate) {
    result.push({ group: currentItem.group });
  }
  return result;
}, []);

步骤解释:

  • 初始化一个空数组[]作为累计结果
  • 遍历每个元素时,用some检查当前group是否已经在结果里
  • 如果不存在,就把新的{ group: xxx }对象push进结果数组
  • 最后返回累计的结果数组

性能小提示

如果你的数据量很大,优先用方法1,因为Set的查找是O(1)时间复杂度,而方法2里的some是O(n),数据量越大,两者的性能差异越明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:10:05