多维数组遍历后某个字段相加

res_data下可能有一个或多个,如下面这个是两个的,下标为第0和第1

img


每个下标下面都有一个goods_list数组,下标为0的下面如下,其下面的goods_list有4个

img


现在想计算所有goods_list下的quantity的总和,
 res_data.forEach(item=>{this.overall += item.goods_list.quantity})  这样只能得到1,明显不对,请问这个如何操作?

res_data.forEach(item=>{
    if (item.goods_list.length > 0) {
        item.goods_list.forEach(subItem => {
            this.overall += subItem.quantity
        })
    }
})
 data.reduce((value, item) => {
  return value + data.goods_list.reduce((value2, item2) => {
    return value2 + item2.quantity;
  }, 0);
 }, 0);

其他对象里面的 quantity 值都是>0 的吗?

你这里只循环了res_data没有循环good_list

得用两个for嵌套遍历,你用一个forEach只能循环到第一层数组,goods_list里面并没有做循环

      var overall = 0;
      for (let i = 0; i < res_data.length; i++) {
        for (let j = 0; j < res_data[i].length; j++) {
          overall += goods_list[j].quantity;
        }
      }

复制就可以直接用了,数组reduce方法天然就是做累加的

this.overall = res_data.reduce((prev, curr) => {
  return prev + curr.goods_list.reduce((prev2, curr2) => {
    return prev2 + curr2.quantity
  }, 0)
}, 0)