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

如何在JS中统计对象数组内指定字段匹配值的出现次数

JavaScript统计数组指定title字段出现次数的实现方案

你给出的示例数组如下:

const arrayOfItems = [{id: 1, title: "Pizza"}, {id: 2, title: "Pizza"}, {id: 3, title: "Pasta"}]

方案1:filter方法(最简实现,适合仅统计单一品类的场景)

逻辑是过滤出所有title为Pizza的元素,直接取结果数组的长度即可:

const pizzaCount = arrayOfItems.filter(item => item.title === 'Pizza').length
  • 优点:写法简洁直观,可读性高
  • 缺点:如果后续需要同时统计多个品类的数量,性能不如reduce,需要多次遍历数组

方案2:reduce方法(灵活度高,适合购物车多品类统计场景)

仅统计Pizza数量的写法:

const pizzaCount = arrayOfItems.reduce((total, currentItem) => {
  return currentItem.title === 'Pizza' ? total + 1 : total
}, 0)

扩展为全品类统计的写法(适合购物车多商品数量展示)

如果后续需要同时统计Pasta、Drink等其他品类的数量,可以一次性生成全品类的统计对象,避免多次遍历数组:

const goodsCountMap = arrayOfItems.reduce((map, item) => {
  // 如果当前品类不存在,初始化为0后再加1
  map[item.title] = (map[item.title] || 0) + 1
  return map
}, {})

// 使用时直接取对应品类的数值即可
const pizzaCount = goodsCountMap.Pizza // 输出2
const pastaCount = goodsCountMap.Pasta // 输出1
  • 优点:仅需遍历数组一次,扩展性强,适合购物车这类需要统计多类商品数量的场景
  • 注意:如果你的购物车商品项存在count字段(代表单个商品的加购数量),统计时替换+ 1为+ item.count即可适配带数量的加购统计逻辑。

方案3:for循环遍历(兼容性最好)

如果需要兼容非常旧的运行环境,不支持ES6高阶函数,可以用基础for循环实现:

let pizzaCount = 0
for (let i = 0; i < arrayOfItems.length; i++) {
  if (arrayOfItems[i].title === 'Pizza') {
    pizzaCount++
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:06:03