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

如何简便统计动态对象中isSelected=true的属性数量?

统计嵌套对象中isSelected为true的数量的简便方法

由于你的对象是动态嵌套结构(键名如MainData1、Child1不固定),手动嵌套forEach会很繁琐且不灵活。以下几种方法更简洁且能适配任意层级的动态结构:

方法1:递归+Reduce

利用递归遍历所有嵌套对象/数组,结合reduce累加计数:

const data = {
    "MainData1": [
        {
            "Child1": [
                { "value": "item1", "isSelected": true },
                { "value": "item2", "isSelected": true }
            ]
        }
    ],
    "MainData2": [
        {
            "Child2": [
                { "value": "item", "isSelected": true }
            ]
        }
    ]
};

const countSelected = (obj) => 
    Object.values(obj).reduce((total, val) => {
        // 递归处理嵌套对象/数组
        if (typeof val === 'object' && val !== null) {
            total += countSelected(val);
        }
        // 当前对象isSelected为true则加1
        return total + (obj.isSelected ? 1 : 0);
    }, 0);

console.log(countSelected(data)); // 输出:3

方法2:迭代栈遍历(非递归)

如果担心递归深度问题,可以用栈实现迭代式遍历:

function countSelected(obj) {
    let count = 0;
    const stack = [obj];
    
    while (stack.length > 0) {
        const current = stack.pop();
        // 检查当前对象的isSelected属性
        if (current.isSelected) count++;
        // 将所有嵌套的对象/数组推入栈中
        Object.values(current).forEach(val => {
            if (typeof val === 'object' && val !== null) stack.push(val);
        });
    }
    return count;
}

console.log(countSelected(data)); // 输出:3

这两种方法都无需硬编码任何动态键名,自动适配所有嵌套层级,比手动写多层forEach更简洁健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:45:35