【发布时间】:2016-11-11 18:49:10
【问题描述】:
我被困住了!我有以下代码:
const hours = [
{
"workHour" : "8",
"Item name 1" : 120,
"Item name 2" : 149,
"Item name 3" : 137
},
{
"workHour" : "9",
"Item name 1" : 134,
"Item name 2" : 119,
"Item name 3" : 144
},
{
"workHour" : "10",
"Item name 1" : 60,
"Item name 2" : 86,
"Item name 3" : 83
},
];
const records = [
{ date: new Date(), statistics: hours },
{ date: new Date(), statistics: hours },
{ date: new Date(), statistics: hours },
];
const result = {};
result.chart = [];
records.forEach((record) => {
const items = [];
record.statistics.forEach((hour) => {
for (let key in hour) {
if (key !== 'workHour') {
items.push({
key: hour[key]
})
}
}
});
result.chart.push({
date: record.date,
items
});
});
console.log(result);
我要做的是遍历记录数组中的每个项目,然后遍历每个记录的小时数,将每个项目的所有值相加,例如计算所有小时数的总数,结果我我想得到的是:
array = [
{
date: //record date,
"Item name 1" : 314,
"Item name 2" : 354,
"Item name 3" : 364
},
{
date: //record date,
"Item name 1" : 314,
"Item name 2" : 354,
"Item name 3" : 364
},
{
date: //record date,
"Item name 1" : 314,
"Item name 2" : 354,
"Item name 3" : 364
}
];
当时间项键已知时的工作示例:
const hours = [
{
"workHour" : "8",
"Item name 1" : 120,
"Item name 2" : 149,
"Item name 3" : 137
},
{
"workHour" : "9",
"Item name 1" : 134,
"Item name 2" : 119,
"Item name 3" : 144
},
{
"workHour" : "10",
"Item name 1" : 60,
"Item name 2" : 86,
"Item name 3" : 83
},
];
const records = [
{ date: new Date(), statistics: hours },
{ date: new Date(), statistics: hours },
{ date: new Date(), statistics: hours },
];
const result = {};
result.records = [];
const calculate = (profits, key) =>
profits
.filter(profit => profit !== null)
.reduce((prevVal, profitVal) => prevVal + profitVal[key], 0) || 0;
records.forEach((record) => {
const items = [];
const { statistics } = record;
result.records.push({
date: record.date,
'Item name 1': calculate(statistics, 'Item name 1'),
'Item name 2': calculate(statistics, 'Item name 2'),
'Item name 3': calculate(statistics, 'Item name 3'),
});
});
console.log(result);
打印:
records = [
{
'Item name 1': 314,
'Item name 2': 354,
'Item name 3': 364,
},
{
'Item name 1': 314,
'Item name 2': 354,
'Item name 3': 364,
},
{
'Item name 1': 314,
'Item name 2': 354,
'Item name 3': 364,
},
]
【问题讨论】:
-
你试图在
array的每个对象上设置相同的值? -
@guest271314 我正在尝试循环遍历所有时间,并且 += 对每个项目求和
-
不关注。预期结果
array包含相同的对象? -
@guest271314 在此示例中它们包含相同的结果,但结果来自按小时收集每个 Item 值。所以:记录->特定记录内的小时数->小时->小时内的3个项目。按小时对每一项求和...
-
预期结果是
items数组对象,例如包含{key:134}?
标签: javascript arrays foreach ecmascript-6