【发布时间】:2021-12-27 01:26:35
【问题描述】:
我有一个对象数组的数据结构,其中花费了许多不同角色的小时数,如下所示:
[{"week 01" : {"Developer" : 1}},
{"week 01" : {"Project Manager" : 5}},
{"week 01" : {"Project Manager" : 6}},
{"week 01": {"Developer" : 8}},
{"week 02" : {"Strategy" : 4}}]
角色和周是动态的(即我事先不知道键/值),我想将同一角色和同一周的所有时间相加以获得以下输出:
[{"week 01" : {
"Developer" : 9
"Project Manager" : 11
}
},
{"week 02" : {
"Strategy" : 4
}
}]
我曾尝试使用reduce 函数,但似乎无法正确使用:
function reduceArray(arr) {
const result = arr.reduce((result, item) => {
let obj = {};
const existing = result.find(function (x) {
for (var prop in x) {
if (x[prop] === item[prop]) {
//same week number found
//loop through roles
for (var subProp in x[prop]) {
if (x[prop][subProp] === item[prop][subProp]) {
obj[prop][subProp] += x[prop][subProp] + item[prop][subProp]
//This is where I lose myself in the prop-loops....
}
}
}
}
})
}, [])
return result;
}
【问题讨论】:
-
你真的需要每个星期的数组中的单个对象吗?为什么不只使用一个对象?
-
我在一个非结构化的 Excel 表中循环,所有的日子都是单独的行,所以每个条目都是一个独立的单元格,这就是为什么它们最终成为单个对象
-
但是是的,最终结果绝对可能看起来像 {"week 01" : {role: hours}, "week 02" : {role : hours}}
标签: javascript arrays ecmascript-6 reduce