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

JavaScript如何筛选对象数组 保留每个price值首次出现的项

JS数组按price属性去重实现方案

要实现过滤掉price重复的对象、保留每个价格第一次出现的条目,核心是记录已经出现过的价格值,遍历过程中只保留首次遇到对应价格的对象即可,下面是两种常用的原生实现方式:

方案1:filter + Set(推荐,性能最优)

用Set结构做已出现价格的缓存,遍历一次数组就能完成去重,代码简洁且时间复杂度最低:

const offersStep = [
     {a: 1, price: 67.10},
     {a: 3, price: 88.20},
     {a: 5, price: 88.20}, 
     {a: 7, price: 57.10},
     {a: 13, price: 57.10},
     {a: 15, price: 57.10},
     {a: 29, price: 57.10},
     {a: 30, price: 57.10},
]

const seen = new Set()
const offers = offersStep.filter(item => {
  if (seen.has(item.price)) return false
  seen.add(item.price)
  return true
})

运行后offers的输出和你预期完全一致:

[
  {a: 1, price: 67.10},
  {a: 3, price: 88.20},
  {a: 7, price: 57.10}
]

方案2:reduce 实现

如果偏好使用reduce做数组聚合,也可以用下面的写法,逻辑和方案1一致:

const offers = offersStep.reduce((result, currentItem) => {
  const priceExisted = result.some(item => item.price === currentItem.price)
  if (!priceExisted) result.push(currentItem)
  return result
}, [])

提示:这个写法每次判断重复都要遍历已生成的结果数组,数据量很大时性能弱于Set方案,日常短数组场景使用没有问题。


内容的提问来源于stack exchange,提问作者Eduardo Raniero Silva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:18:24