开发者社区 问答 正文

如何在JS中返回所有具有相同值的重复对象?

有没有一种聪明的方法来获取所有具有相同值的对象?

[ { name: 'a' , value: '123'}, { name: 'b' , value: '123'}, { name: 'c' , value: '1234'}, { name: 'd' , value: '1234'}, { name: 'e' , value: '12345'}, { name: 'f' , value: '123456'} ] 理想的结果是:

[ { name: 'a' , value: '123'}, { name: 'b' , value: '123'}, { name: 'c' , value: '1234'}, { name: 'd' , value: '1234'} ] 我正在考虑计算所有值的出现,但这似乎不是一个好方法。

感谢

展开
收起
被纵养的懒猫 2019-09-29 18:09:09 417 分享 版权
阿里云 AI 助理回答

在处理这样的数据筛选问题时,使用JavaScript等编程语言可以很灵活地实现你的需求。一个高效且简洁的方法是使用数组的filter()方法结合对象或Map来跟踪已遇到的值。下面是一个示例代码,展示了如何根据相同的value字段来过滤出具有相同值的对象:

const data = [
  { name: 'a', value: '123' },
  { name: 'b', value: '123' },
  { name: 'c', value: '1234' },
  { name: 'd', value: '1234' },
  { name: 'e', value: '12345' },
  { name: 'f', value: '123456' }
];

// 使用Set来存储已经遇到的uniqueValues
const seenValues = new Set();
// 使用filter方法筛选出至少有另一个对象具有相同value的项
const result = data.filter(item => {
  if (!seenValues.has(item.value)) {
    seenValues.add(item.value);
    return false; // 首次遇到此值时不包含它,但记录下来
  }
  return true; // 如果之前见过这个值,则包含当前项
});

console.log(result);

这段代码首先创建了一个名为seenValuesSet,用于存储我们遇到过的不同value。然后,通过filter()方法遍历原始数组。对于每个元素,如果它的value尚未出现在seenValues中,我们就将其添加到集合中,并从结果中排除当前元素(因为这是第一次遇到该值)。如果value已经在集合中(即之前已经遇到过),则保留当前元素,因为它属于具有相同值的组。

执行上述代码后,你将得到如下输出,符合你的预期结果:

[
  { name: 'a', value: '123' },
  { name: 'b', value: '123' },
  { name: 'c', value: '1234' },
  { name: 'd', value: '1234' }
]

这种方法避免了显式地计算所有值的出现次数,而是直接基于“是否已见过”这一逻辑进行筛选,既高效又直接。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答标签:
问答地址: