我每周都会收到一些对象,这些对象上的每一个都有日期,小时和其他字段。我想对每天的这些对象数组进行排序。
对象的例子
var anArray = [{
'End':"22:00",
'Id':"Q45575",
'Name':"W-299849",
'Start':"20:00",
'date':"2018-02-04",
'hours':2
},{
'End':"21:00",
'Id':"Q45551",
'Name':"W-299809",
'Start':"15:00",
'date':"2018-02-07",
'hours':5
},{
'End':"20:00",
'Id':"Q45515",
'Name':"W-299849",
'Start':"10:00",
'date':"2018-02-04",
'hours':2
}];
输出应该是这样的,假设星期日是2/4
周日太阳星期三星期三星期五4 0 0 5 0 0
这就是我所拥有的
var resourceData = data.reduce((a, c) => {
var targetDay = new Date(c.date).getDay() === 6 ? 0 : (new Date(c.date).getDay() + 1);
if (a) {
a['week'][targetDay] += c.hours;
} else {
a = { 'week': new Array(7).fill(0) };
a['week'][targetDay] = c.hours;
}
return a;
}, {});
无法正常使用targetDay错误
答案 0 :(得分:0)
您的密码几乎已到达终点。
你可以让reduce的initialValue为{ 'week': new Array(7).fill(0) }
,不需要在reduce的处理程序中与if(a)
进行比较。
请参阅以下代码中的评论:
var anArray = [{ 'End':"22:00", 'Id':"Q45575", 'Name':"W-299849", 'Start':"20:00", 'date':"2018-02-04", 'hours':2},{ 'End':"21:00", 'Id':"Q45551", 'Name':"W-299809", 'Start':"15:00", 'date':"2018-02-07", 'hours':5},{ 'End':"20:00", 'Id':"Q45515", 'Name':"W-299849", 'Start':"10:00", 'date':"2018-02-04", 'hours':2}];
var resourceData = anArray.reduce((a, c) => {
var targetDay = new Date(c.date).getDay() === 6 ? 0 : (new Date(c.date).getDay() + 1);
a['week'][targetDay] += c.hours;
/*
else {
a = { 'week': new Array(7).fill(0) };
a['week'][targetDay] = c.hours;
}*/ //remove else block because already created [var a] by the initialValue
return a;
}, { 'week': new Array(7).fill(0) }); //initialize with expected object instead of {}
console.log(resourceData)

答案 1 :(得分:0)
而不是减少,为此我认为每个似乎更合适。
以下示例。
getElementById