如何在嵌套对象数组中用filter统计外层及subCatg数组符合条件的数量
嵌套对象数组符合条件项统计解决方案
问题分析
你的现有代码存在三个关键问题:
- 条件判断中
isValidated === true未指定所属对象,应该是items.isValidated - Mock数据里的
inProcessing和isValidated是字符串类型的"true"/"false",直接用!items.inProcessing会判断错误(非空字符串在JS中是真值,!"true"结果为false) - 未遍历嵌套的
subCatg数组,无法统计子数组中的符合条件项
修正后的代码
getCount = (itemstoBeCreated) => { const { typeCreated } = this.props; // 定义统一的判断条件函数,复用逻辑 const meetsCondition = (item) => { // 直接针对字符串类型的布尔值做判断 return item.inProcessing !== "true" && item.isValidated === "true"; }; // 统计外层数组符合条件的数量 const outerCount = itemstoBeCreated.filter(meetsCondition).length; // 统计所有嵌套subCatg数组中符合条件的数量 const subCount = itemstoBeCreated.reduce((total, currentItem) => { return total + currentItem.subCatg.filter(meetsCondition).length; }, 0); // 计算总数量 return typeCreated + outerCount + subCount; };
代码说明
- 统一条件函数:把判断逻辑抽成
meetsCondition函数,避免重复代码,也方便后续修改条件 - 字符串布尔值处理:直接用字符串比较替代类型转换,逻辑更直观
- 子数组统计:用
reduce遍历外层数组,对每个项的subCatg数组过滤后累加长度,得到所有子项的符合条件总数 - 总和计算:将外部传入的
typeCreated、外层统计数、子数组统计数相加,得到最终结果
内容的提问来源于stack exchange,提问作者Still_Learning
相关产品推荐
相关产品推荐

