我得到了以下数据,我需要返回递归总数(在本例中为 60)。下面的代码返回TypeError: Cannot read property 'Symbol(Symbol.iterator)' of undefined
指向object
。我认为我在这里使用的代码不是用于数组定义的。如何将其转换为使用数组?
var data = [
{
total: 10,
moreData: {
total: 10
}
},
{
total: 10,
moreData: {
total: 10,
moreData: {
total: 10
}
}
},
{
total: 10
}
];
function sumUp(object){
object.totalValue=0;
for(child of object.children){
object.totalValue+=sumUp(child);
}
return object.totalValue+object.value;
}
totalofall=sumUp(data);
console.log(totalofall);
最佳答案
结合array.prototype.map
和array.prototype.reduce
的递归方式:
var data = [
{
total: 10,
moreData: {
total: 10
}
},
{
total: 10,
moreData: {
total: 10,
moreData: {
total: 10
}
}
},
{
total: 10
}
];
var sum = data.map(totInObj).reduce((m, o) => m + o, 0);
console.log(sum);
function totInObj(obj) {
return obj.moreData ? obj.total + totInObj(obj.moreData) : obj.total;
}
关于Javascript递归添加所有 "total"属性并返回给用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48535603/