我将数据集简化为以下
var data = {
foo: 'bar'
children: [
{
foo: 'bar'
children: [
{ foo: 'bar' }, // count
{ foo: 'bar' }, // count
{
foo: 'bar'
children: [
{ foo: 'bar' }, // count
{ foo: 'bar' }, // count
]
},
{ foo: 'bar' }, // count
]
},
{
// etc
}
]
}
还有更多的东西。嵌套下面的任意数量的对象。
{
foo: 'bar'
children: []
}
我希望能够计算结构中任何“节点”的总“最后一个孩子”。到目前为止,我已经编写了一个快速脚本,它将使用在递归函数外部的计数器变量从顶层开始工作 - 但这会阻止它重复使用。
var total = 0;
var countLastChildren = function(object) {
if(object.children) {
object.children.forEach(function(el){
countLastChildren(el);
});
} else {
total++;
}
}
countLastChildren(data);
console.log(total);
我无法理解如何在countLastChildren()内部计数器,以允许它返回一个值,并通过传入嵌套在我的主结构中的不同对象或对象使其可重复使用。
有什么想法吗?感谢
答案 0 :(得分:4)
你可以让函数返回计数:
var countLastChildren = function(object) {
if(object.children) {
var return_val = 0;
object.children.forEach(function(el){
return_val += countLastChildren(el);
});
return return_val;
} else {
return 1;
}
}
console.log(countLastChildren(data));
答案 1 :(得分:2)
一些代码打高尔夫球:
function Total(obj) {
return obj.children
? obj.children.map(Total).reduce(function (prev, cur) { return prev + cur; })
: 1;
}