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

JavaScript如何根据指定状态数组过滤对象数组

问题根源

你的代码无法得到正确结果,存在两个核心错误:

  • forEach 方法本身没有返回值,无论回调内返回什么内容,forEach 执行后始终返回undefined。而filter方法需要回调返回布尔值判定元素是否保留,undefined会被判定为假值,最终会返回空数组。
  • 现有判断逻辑只做了单状态满足就返回的判断,不符合「所有指定状态值均大于0才保留元素」的需求。
修复方案

判断数组内所有元素是否都满足指定条件,应该使用Array.every()方法:该方法会遍历数组,仅当所有元素都满足回调的判断规则时返回true,只要有一个元素不满足就直接返回false,完全匹配你的筛选需求。
实现代码如下:

const result = data.filter(item => {
  return statuses.every(statusKey => item.status[statusKey] > 0)
})

执行后得到的结果和预期完全一致:

[
  {
    id: 1,
    name: "data1",
    status: {
      open: 1,
      closed: 1,
      hold: 0,
      block: 1
    }
  }
]
执行逻辑
  • 遍历原始data数组的每一个元素
  • 对当前元素,逐一校验statuses中列出的状态键,检查对应item.status下的数值是否大于0
  • 所有指定状态值都大于0时,every返回true,当前元素被保留到结果数组
  • 任意一个指定状态值小于等于0时,every返回false,当前元素被过滤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.18 16:15:45