生成日期并向对象数组添加新属性 [英] 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
或者如果你不想分组:
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
解释见其他答案...看起来像是一个类在这里不是吗?;)
For explanation see other answer... Looks like theres a class out here isnt it? ;)
这篇关于生成日期并向对象数组添加新属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文