JavaScript深度对象数组中的和值

JavaScript深度对象数组中的和值,javascript,lodash,Javascript,Lodash,我一直在寻找一个解决方案,并尝试不同的事情,以获得解决方案,我正在寻找几个小时。我在下面有一个数组,我希望能够分别对该数组执行两项操作。(因此有两个单独的功能) 职能1。我想求所有“权重”值的和。(即3+2+1+2+1+1+0)我尝试过使用lodash sumBy,它在对数组中的简单对象求和方面做得很好 职能2。我希望能够遍历元素(我一直在尝试使用lodash展平对象,但运气不好) 我正在寻求任何帮助。如果这是一个新手问题,或者因为某种原因我找不到合适的搜索词,我向你道歉 编辑: 目前正在使用e

我一直在寻找一个解决方案,并尝试不同的事情,以获得解决方案,我正在寻找几个小时。我在下面有一个数组,我希望能够分别对该数组执行两项操作。(因此有两个单独的功能)

职能1。我想求所有“权重”值的和。(即3+2+1+2+1+1+0)我尝试过使用lodash sumBy,它在对数组中的简单对象求和方面做得很好

职能2。我希望能够遍历元素(我一直在尝试使用lodash展平对象,但运气不好)

我正在寻求任何帮助。如果这是一个新手问题,或者因为某种原因我找不到合适的搜索词,我向你道歉

编辑: 目前正在使用es5,因此箭头功能不可用

var答案=[{
'1': {
id:'5aa2542e4e31482f1e',
文本:“雇员”,
订单号:2,
体重:3,
},
'5': {
id:'5a442e47339482f22',
文本:“工人”,
订单号:6,
体重:2,
}
},
{
'2': {
id:'5A52442E473949482F51',
文本:“时间感”,
订单号:3,
体重:1,
},
'3': {
id:'5a2442e47e3932f52',
文本:“组敏感”,
订单号:4,
体重:2,
}
},
{
id:'5a57d9375a5a7ac20317',
文本:“Med”,
订单号:1,
体重:1
},
{
id:'5a57da0755a7ac4691c',
文本:“Med”,
订单号:2,
体重:1
},
{
id:'5a57da545aa7ac206220',
文本:'是',
订单号:1,
重量:0
}
]

基本解决方案是展平阵列

const x = answers.map(obj => Object.values(obj))
在这之后,就有了一个数组

您可以使用reduce加入这些数组

const flattenedAnswers = x.reduce((acc, item) => acc.concat(item), []);
为了求和权重,可以使用map和reduce

const sum = flattenedAnswers.map(item => item.weigt).reduce((acc, item) => acc + item), 0);
要迭代这些项,只需迭代平坦的答案数组

var答案=[{
'1': {
id:'5aa2542e4e31482f1e',
文本:“雇员”,
订单号:2,
体重:3,
},
'5': {
id:'5a442e47339482f22',
文本:“工人”,
订单号:6,
体重:2,
}
},
{
'2': {
id:'5A52442E473949482F51',
文本:“时间感”,
订单号:3,
体重:1,
},
'3': {
id:'5a2442e47e3932f52',
文本:“组敏感”,
订单号:4,
体重:2
}
}
]
const flat=answers.map(x=>Object.values(x)).reduce((acc,item)=>acc.concat(item),[]);
const sum=flat.map(x=>x.weight)。reduce((acc,item)=>acc+item,0);

console.log(sum)
您可以通过
answers.forEach(answer=>{…})

您可以通过
Object.keys(answer).forEach(key=>{let val=answer[key]})


在每个
answer
和每个val中查找Weight属性,如果有,则将其添加到您在foreach函数之外定义的变量中。

。。。为什么在这个数组中有两种不同的数据格式?这些是从发送给我的调查中得到的答案。顶部的部分来自复选框中的问题,因此用户可以选择多个元素。底部是只有一个答案的收音机。
EDIT:目前正在使用es5,因此箭头功能不可用。
es5将永远不包括箭头功能,因为规范已经完成。您可以在标题中使用函数(),我不是指es5,而是指更新代码以使用es6。