Javascript 按键获取json最大计数
我试图获取一个键中的最大对象数,在本例中为“child”。对于每个对象和子对象-对象,我想达到每个对象所达到的级别。希望你能理解这个问题。这对我来说意义重大 例如: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" }] },{
[{
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));