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

JavaScript如何正确使用reduce统计对象内布尔值数量

JS嵌套对象布尔值总数统计(reduce实现)

为什么代码会返回undefined

reduce是数组原型上的专属方法,直接在普通对象上调用会直接报错;如果代码能运行但返回undefined,基本是两个问题:

  • 没有给reduce传入累加器的初始值
  • 遍历回调函数中没有返回更新后的累加值,导致下一轮遍历拿不到累计结果

正确实现代码

首先用Object.values()把外层对象的属性值提取为数组(也就是三个宠物的子对象组成的数组),再调用reduce做累加,每轮遍历统计当前子对象里布尔类型值的数量,加到总计数上即可。

const petMap = {
  mongoose: {
    name: "Starky",
    age: 3,
    playful: false
  },
  dog: {
    name: "Maks",
    age: 7,
    playful: false
  },
  parrot: {
    name: "Petty",
    age: 4,
    playful: true
  }
}

// 统计布尔值总数
const booleanTotal = Object.values(petMap).reduce((count, currentItem) => {
  // 统计当前子对象里布尔类型值的个数
  const currentBoolNum = Object.values(currentItem).filter(value => typeof value === 'boolean').length
  // 返回累加后的计数,这步不能漏
  return count + currentBoolNum
}, 0) // 0是累加初始值,必须传

console.log(booleanTotal) // 运行输出3,和示例对象的布尔值数量匹配

关键注意点

  • 普通对象要先用Object.values()/Object.entries()转成数组后,才能调用数组的reduce方法
  • reduce的第二个参数是累加器初始值,做数值统计时固定传0即可,不传会默认拿数组第一个元素当初始值,统计逻辑会完全错乱
  • 每轮遍历的回调必须return更新后的累加值,否则累加器会变成undefined,最终结果也会是undefined

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 02:28:03