js递归求和有什么好的方法?

A={
    value:1,
    items:[A,A,A] //items里面是A类型格式的对象
}

有什么好的方法,求出对象A里面所有value的总和

阅读 2.5k
1 个回答
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;
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题