怎么遍历输出一个带有内嵌数组的集合中的某些值?

最近在研究react,遇到一个问题,我在mongo中储存了一组数据,数据格式是这样
{
_id: 1,
items: [

          { name: "哇哈哈", amount: 10 },
          { name: "脉动", amount: 11 },
          { name: "百事", amount: 15 }
       ]

}
{
_id: 2,
items: [

          { name: "哇哈哈", amount: 10 },
          { name: "脉动", amount: 11 },
          { name: "百事", amount: 15 }
       ]

}
{
_id: 3,
items: [

          { name: "哇哈哈", amount: 10 },
          { name: "脉动", amount: 11 },
          { name: "百事", amount: 15 }
       ]

}
现在我想把每一个name的amount累加输出为一个新的数组,比如把name为”哇哈哈“的商品都累加输出到一个新的数组中,在新的数组中的第一项应该为30,但是现在始终找不到合适的方法做到,用map来遍历输出console的的结果数组中的每一项都是undefined,实在是想不通啊,google也没有找到方法解决,诸位有什么好的办法吗?

阅读 5.3k
4 个回答

你这是object,不是array,当然不能用map来遍历。
用for in来做循环吧

您的JSON嵌套的可真够深的,可以用如下的代码来遍历:

<script>
var arr=[{
_id: 1,
items: [

          { name: "哇哈哈", amount: 10 },
          { name: "脉动", amount: 11 },
          { name: "百事", amount: 15 }
       ]
},
{
_id: 2,
items: [

          { name: "哇哈哈", amount: 10 },
          { name: "脉动", amount: 11 },
          { name: "百事", amount: 15 }
       ]
},
{
_id: 3,
items: [

          { name: "哇哈哈", amount: 10 },
          { name: "脉动", amount: 11 },
          { name: "百事", amount: 15 }
       ]
}];

var whh=0;

for(var i in arr){    
    for(var j in arr[i]){
        for(var z in arr[i][j]){
            if(arr[i][j][z].name=='哇哈哈'){
                whh+=arr[i][j][z].amount;
            }
        }
    }
    
}

console.log(whh);
</script>

你用react应该是支持es6吧,我这是es6语法;

需要嵌套计算一下:
//假定是b是服务端返回的复杂结构数组
b.map((_,index)=>b.map(i=>i.items[index].amount).reduce((i,j)=>i+j))

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题