Javascript 按键获取json最大计数

Javascript 按键获取json最大计数,javascript,json,Javascript,Json,我试图获取一个键中的最大对象数,在本例中为“child”。对于每个对象和子对象​​-对象,我想达到每个对象所达到的级别。希望你能理解这个问题。这对我来说意义重大 例如: [{ name:"Node Parent 1 Level 0", childs:[{ name:"Sub Node 1 Level 1", childs:[{ name:"Sub Node 1 Level 2" }] },{

我试图获取一个键中的最大对象数,在本例中为“child”。对于每个对象和子对象​​-对象,我想达到每个对象所达到的级别。希望你能理解这个问题。这对我来说意义重大

例如:

[{
    name:"Node Parent 1 Level 0",
    childs:[{
        name:"Sub Node 1 Level 1",
        childs:[{
            name:"Sub Node 1 Level 2"
        }]
    },{
        name:"Sub Node 2"
    },{
        name:"Sub Node 3"
    }]
},{
    name:"Node Parent 2 Level 0",
    childs:[{
        name:"Sub Node 1 Level 1",
        childs:[{
            name:"Sub Node 1 Level 2"
        },{
            name:"Sub Node 2 Level 2",
            childs:[{
                name:"Sub Node 1 Level 3"
            },{
                name:"Sub Node 2 Level 3",
                childs:[{
                    name:"Sub Node 1 Level 4"
                },{
                    name:"Sub Node 2 Level 4"
                }]
            }]
        }]
    },{
        name:"Sub Node 2 Level 1",
        childs:[{
            name:"Sub Node 1 Level 2"
        },{
            name:"Sub Node 2 Level 2",
            childs:[{
                name:"Sub Node 1 Level 3"
            },{
                name:"Sub Node 2 Level 3"
            }]
        }]
    }]
}]

根据您的评论,类似的内容如下:

版本2.0 代码可能需要重构,但我认为这是您正在寻找的解决方案:

var obj1= [{/* Based on updated sample code */ }];

        function getCount(obj2){
            var res = obj2.reduce(function(res,node){ return res += Object.keys(node).reduce(
                function(res,value){
                    if (value==="childs"){
                        res +=2 + getCount(node[value]);
                        res -= obj2.filter(function(n){  return Object.keys(n).some(function(propName){ return propName ==="childs"; }); }).length;
                    }
                    return res;
                },0 );
            },0);
            return res;
        }
        console.log('Show Levels')
        for(var i=0;i<obj1.length;i++){
            console.log( 'Object =>',obj1[i].name, " level= ", getCount([obj1[i]]));
        }

预期的输出是什么?每个父对象的“child”子节点总数。示例:“节点父节点1”或对象1:2、“节点父节点2”或对象2:3等。您是否尝试过这样做?当然,但问题是我的工作量过大,这个任务对于我们的一个产品是必需的,因为某种原因,它每次出现时都会抛出结果,但主对象的父对象1和父对象2没有总计。我想我遗漏了一点,您只需要每个父对象的总计?我调用父对象[{/*父对象1*/},{/*父对象2*/}]。然后我想要每个父对象的最深对象的总数。为了更好地理解,我修改了代码。结果大多数是:“节点父1级别0”=>2个级别,“节点父1级别0”=>4个级别。是每个节点父节点的最低级别。非常感谢@Dalorzo,这对我非常有用。
  var parent1= [{
        name:"Node Parent 2",
        childs:[{
            name:"Sub Node 2"
        },
            {
                name:"Sub Node 3",
                childs:[{
                    name:"Sub Sub Node 1"
                },{
                    name:"Sub Sub Node 2",
                    childs:[{
                        name:"Sub Sub Sub Node 1"
                    },{
                        name:"Sub Sub Sub Node 2"
                    }]
                }]
            }]
    }];

    function getCount(obj2){
        var res = obj2.reduce(function(res,node){ return res += Object.keys(node).reduce(
            function(res,value){
                if (value==="childs"){ res +=1 + getCount(node[value]); }
                return res;
            },0 );
        },0);
        return res;
    }

    console.log("final count", getCount(parent1));