React中统计多层嵌套对象status值出现次数的实现方法
解决方案
原函数仅遍历传入对象的第一层子属性,没有递归进入嵌套的子对象,因此无法获取深层节点的status值。只需要补充深度递归遍历逻辑,即可覆盖任意嵌套层级的节点统计需求。
完整实现代码
function getTally(obj) { const tally = {}; // 深度递归遍历函数 function traverse(currentNode) { // 跳过非普通对象节点:null、数组、基础类型值不做递归 if (typeof currentNode !== 'object' || currentNode === null || Array.isArray(currentNode)) { return; } // 当前节点存在status字段时,对应计数+1 if (currentNode.status) { tally[currentNode.status] = (tally[currentNode.status] || 0) + 1; } // 遍历当前节点所有属性值,递归进入子节点 Object.values(currentNode).forEach(childValue => traverse(childValue)); } traverse(obj); return tally; } // 传入示例data测试 console.log(getTally(data)); // 输出结果:{ ERROR: 2, WARNING: 3, OK: 2 },与预期完全一致
逻辑说明
- 采用深度优先遍历逻辑,会逐层进入所有嵌套的对象节点,不会遗漏任意深层的
status字段 - 增加了类型校验逻辑,会自动跳过结构中的数组(比如
attr1)、字符串(比如attr2)这类非普通对象节点,避免运行报错 - 计数逻辑自动兼容首次出现的状态值,不需要额外写分支判断状态是否已存在
内容的提问来源于stack exchange,提问作者Mark Yu
相关产品推荐
相关产品推荐

