function sum(arr) { var _sum = 0; arr.forEach(v => _sum += v); return _sum; } function sumA(A) { if(A.items && A.items.length) { return sum([A.value].concat(a.items.map(sumA))); } else { return A.value; } } 最终调用sumA求和即可。不知这样是否符合你的要求? sumA中的那个concat是为了尾递归优化,不过我也不是很肯定这么写是不是就能进行尾递归优化。更易懂的版本: function sumA(A) { if(A.items && A.items.length) { var sum = A.value; for(let a of A.items) { sum += sumA(a); } return sum; } else { return A.value; } }
最终调用
sumA
求和即可。不知这样是否符合你的要求?sumA
中的那个concat
是为了尾递归优化,不过我也不是很肯定这么写是不是就能进行尾递归优化。更易懂的版本: