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

如何筛选数组中存在items子项count值大于0的顶层对象

数组过滤需求实现方案

需求说明

对包含多个对象的数组进行处理,仅保留存在至少1个items子项count值大于0的顶层对象。示例中需移除id为tags和sale_status的对象(二者所有items子项count值都为0),最终仅保留id为quotation_status的对象。

当前输入对象数组

[
  {
    "id": "tags",
    "label": "Tags",
    "items": [
      {"key": 2,"count": 0},
      {"key": 1,"count": 0},
      {"key": 3,"count": 0}
    ]
  },
  {
    "id": "sale_status",
    "label": "Status",
    "items": [
      {"key": "completed","count": 0},
      {"key": "processing","count": 0},
      {"key": "on-hold","count": 0}
    ]
  },
  {
    "id": "quotation_status",
    "label": "Status",
    "items": [
      {"key": "concept","count": 1}
    ]
  }
]

期望输出结果

[
  {
    "id": "quotation_status",
    "label": "Status",
    "items": [
      {"key": "concept","count": 1}
    ]
  }
]

现有代码逻辑分析

你当前编写的代码逻辑本身是成立的:

function activeFilters() {
  let test = test1.value
  let filters = store.getters[test].filters

  const result = filters.filter((o) => o.items.some((obj) => obj.count));
  return result;
};

filter用于筛选符合条件的顶层对象,some用于判断子数组是否存在至少一个符合条件的项,数值0隐式转换为布尔值false,大于0的数值隐式转换为true,刚好匹配你的判断需求。

如果运行未得到预期结果,可使用增强兼容版本的写法,覆盖边界异常场景:

function activeFilters() {
  const test = test1.value
  const filters = store.getters[test]?.filters || []
  // 增加边界判断:items必须是数组、count属性存在才做判断
  return filters.filter(topItem => 
    Array.isArray(topItem.items) && topItem.items.some(subItem => subItem?.count > 0)
  )
}

常见异常场景包括:部分顶层对象没有items属性、items不是数组、子项不存在count属性,上面的写法可以规避这些场景下的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:57:03