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

JavaScript如何检查对象数组指定键存在性并统计匹配数量

前置代码

const student= [
      {
        student_id: 0,
        name: "Rhoda Salas",
        checked:"checked"
      },
      {
        student_id: 1,
        name: "Jewell Avery"
      },
      {
        student_id: 2,
        name: "Susanne Harris",
        checked:"checked"
      }
    ]

需求:从上述学生信息数组中,筛选出所有包含checked键的对象,同时统计符合条件的对象总数,以下是常见实现方式:

  • 方式1:filter() + hasOwnProperty()
    最常用的简洁写法,hasOwnProperty只会判定对象自身存在的键,不会受原型链上的属性影响,结果最严谨。filter返回的新数组就是所有符合条件的对象,其length属性就是符合条件的总数。

    // 筛选符合条件的学生对象
    const checkedStudents = student.filter(item => item.hasOwnProperty('checked'))
    // 统计总数
    const total = checkedStudents.length
    
    console.log(checkedStudents) // 输出2条带checked键的学生数据
    console.log(total) // 输出2
    
  • 方式2:filter() + in 运算符
    写法更简洁,in运算符会判定键是否存在于对象自身或原型链上,当前场景下学生对象都是普通字面量对象,不存在原型链污染的话,结果和方式1一致。

    const checkedStudents = student.filter(item => 'checked' in item)
    const total = checkedStudents.length
    
  • 方式3:基础for循环手动收集
    不依赖数组高阶方法,兼容性最好,适合极低版本JS环境,逻辑直白可定制性强。

    const checkedStudents = []
    let total = 0
    for (let i = 0; i < student.length; i++) {
      const curItem = student[i]
      if (curItem.hasOwnProperty('checked')) {
        checkedStudents.push(curItem)
        total++
      }
    }
    
  • 方式4:for...of 循环遍历
    是基础for循环的简化写法,不需要手动维护数组索引,代码可读性更高。

    const checkedStudents = []
    let total = 0
    for (const item of student) {
      if ('checked' in item) {
        checkedStudents.push(item)
        total++
      }
    }
    
  • 方式5:reduce() 单次遍历完成筛选+统计
    只需要遍历一次数组就能同时拿到筛选结果和计数,不需要二次读取数组长度,数据量较大时性能更优。

    const { checkedStudents, total } = student.reduce((acc, cur) => {
      if (cur.hasOwnProperty('checked')) {
        acc.checkedStudents.push(cur)
        acc.total++
      }
      return acc
    }, { checkedStudents: [], total: 0 })
    

避坑提示:不要直接用if(item.checked)作为判断条件,这种写法只会在checked的值为真值(非空字符串、非0、非false、非null、非undefined)时判定为通过,如果键存在但值为假值,会出现漏判,不符合「判断键是否存在」的核心需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:09:16