如何筛选数组中存在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
相关产品推荐
相关产品推荐

