在对象列表javascript上使用reduce函数

时间:2018-03-14 16:49:10

标签: javascript jquery html salesforce reduce

我每周都会收到一些对象,这些对象上的每一个都有日期,小时和其他字段。我想对每天的这些对象数组进行排序。

对象的例子

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错误

2 个答案:

答案 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