我的json结构就像一个树形结构。
答案 0 :(得分:0)
理解counter
的数据结构需要一段时间我希望能够复制如何获得解决方案,但它只是松散地基于发布的代码(对于初学者没有temp
变量)。 / p>
理解以下代码的关键是paramList
和svalue
对象具有相似但不相同的结构。
function findCounterDepth( counter)
{ var maxDepth = 0;
counter.algoList.forEach( function( algo)
{ findParamListDepth(algo.paramList, 0);
});
function findParamListDepth(paramList, depth)
{ ++depth;
paramList.forEach( function (paramObj)
{ var child = paramObj.svalue || paramObj.paramList;
if( child)
{ findParamListDepth(child, depth);
return;
}
});
maxDepth = Math.max(maxDepth, depth);
}
return maxDepth;
}
findCounterDepth(counter);
//= 4
<小时/> 的修改
为每个算法对象添加叶节点数是不复杂的。这里计数被添加为算法对象的dataLeafCount
属性:
function findCounterDepth( counter)
{ var maxDepth = 0;
var leafCount = 0; // add a leaf counter
counter.algoList.forEach( function( algo)
{ leafCount = 0; // zero leaf count per algorithm object
findParamListDepth(algo.paramList, 0);
algo.dataLeafCount = leafCount; // store as "dataLeafCount" property
});
function findParamListDepth(paramList, depth)
{ ++depth;
paramList.forEach( function (paramObj)
{ var child = paramObj.svalue || paramObj.paramList;
if( child)
{ findParamListDepth(child, depth);
return;
}
++leafCount; // it doesn't have children, increment leaf count;
});
maxDepth = Math.max(maxDepth, depth);
}
return maxDepth;
}
findCounterDepth(counter); //= 4
counter.algoList[0].dataLeafCount; //= 4
counter.algoList[1].dataLeafCount; //= 4
请注意,如果需要维护输入对象不变性,则应修改findCounterDepth
以返回新数据对象中的值。