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

如何基于两个属性移除数组对象中的重复项及对应原始值

实现方案

实现逻辑分为两步:

  • 先统计所有room_rate_type_id + price组合的出现次数
  • 再过滤出仅出现过1次的组合对应的条目

完整实现代码

const rooms = [
  {
    room_rate_type_id: 202,
    price: 200
  },
  {
    room_rate_type_id: 202,
    price: 200
  },
  {
    room_rate_type_id: 202,
    price: 189
  },
  {
    room_rate_type_id: 190,
    price: 200
  }
];

// 统计每个组合的出现次数
const countMap = {};
rooms.forEach(item => {
  const uniqueKey = `${item.room_rate_type_id}_${item.price}`;
  countMap[uniqueKey] = (countMap[uniqueKey] || 0) + 1;
});

// 过滤仅保留无重复的条目
const result = rooms.filter(item => {
  const uniqueKey = `${item.room_rate_type_id}_${item.price}`;
  return countMap[uniqueKey] === 1;
});

console.log(result);

执行后输出结果和你期望的一致:

[
  { room_rate_type_id: 202, price: 189 },
  { room_rate_type_id: 190, price: 200 }
]

优化版(仅遍历一次原数组,适合大数据量场景)

const tempMap = new Map();
rooms.forEach(item => {
  const uniqueKey = `${item.room_rate_type_id}_${item.price}`;
  if (tempMap.has(uniqueKey)) {
    tempMap.get(uniqueKey).count++;
  } else {
    tempMap.set(uniqueKey, { count: 1, data: item });
  }
});

const result = Array.from(tempMap.values())
  .filter(item => item.count === 1)
  .map(item => item.data);

你原有代码不满足需求的原因是:原有逻辑仅会把重复组里除了第一次出现之外的条目删掉,不会把整个重复组全部排除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:06:04