简体   繁体   English

生成日期并将新属性添加到对象数组

[英]generate dates and add new property to array of object

I have no control over a list of data, but I need to map it to a date range data. 我无法控制数据列表,但是我需要将其映射到日期范围数据。

The list of data look like this, which only have from and to. 数据列表看起来像这样,只有从和到。

[
    {
        "date_from": "2017-05-06 00:00:00",
        "date_to": "2017-05-08 23:59:59",
        "state": {
            "name": "San francisco"
        }
    }
    {
        "date_from": "2017-05-03 00:00:00",
        "date_to": "2017-05-07 23:59:59",
        "state": {
            "name": "Las Vegas"
        }
    }
]

I'm able to generate a date range base on month 我可以根据月份生成日期范围

function generateDates(startDate, stopDate) {
  var dateArray = [];
  var currentDate = moment(startDate);
  var stopDate = moment(stopDate);
  while (currentDate <= stopDate) {
    dateArray.push({
      date: moment(currentDate).format('YYYY-MM-DD')
    });
    currentDate = moment(currentDate).add(1, 'days');
  }

  return dateArray;
}

generateDates('2017-05-01', '2017-05-31');

How can I put the state object into the date range array like 我如何将状态对象放入日期范围数组中

[
{date: '2017-05-06', state:{name:'San francisco'}},
{date: '2017-05-07', state:{name:'San francisco'}},
{date: '2017-05-08', state:{name:'San francisco'}},
..
..
]
var sparse=input.reduce((sparse,event)=>generateDates(event.date_from,event.date_to).forEach(date=>(sparse[date]=sparse[date]||[]).push(event))||sparse,{});

var result=[];
for(date in sparse){
 result.push({date:date,states:sparse[date].map(el=>el.state)});
}

http://jsbin.com/larumiyeli/edit?console http://jsbin.com/larumiyeli/edit?console

Or if you dont want to group: 或者,如果您不想分组:

  var result=input.reduce((sparse,event)=>sparse.concat(generateDates(event.date_from,event.date_to).map(el=>(el.state=event.state,el)),[]);

http://jsbin.com/mixorecoyo/edit?console http://jsbin.com/mixorecoyo/edit?console

For explanation see other answer... Looks like theres a class out here isnt it? 有关解释,请参见其他答案。。。好像这里有课吗? ;) ;)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM