2017-05-07 260 views
3

如何从这个数组分裂FROM_DATE和TO_DATE日期范围数组列表

[ 
    { 
     "date_from": "2017-05-06 00:00:00", 
     "date_to": "2017-05-08 23:59:59", 
     "event": "code jam" 
    }, 
    { 
     "date_from": "2017-05-03 00:00:00", 
     "date_to": "2017-05-07 23:59:59", 
     "event": "boxing day" 
    } 
] 

这个转变?

[ 
.. 
.. 
{date: '2017-05-06', state:{name:'San francisco'}}, 
{date: '2017-05-07', state:{name:'San francisco'}}, 
{date: '2017-05-08', state:{name:'San francisco'}}, 
.. 
.. 
] 

我不知道从哪里开始。我得到了一个API,我无法更改它的结构,我需要将数据放入日期范围列表中,以便我可以使用日历插件进行映射。需要帮忙。

+0

你想让它显示在之间,或只是在开始/结束日期每次约会? –

+0

@Jonasw每一次约会,这是主要的挑战。 –

+0

多数民众赞成好...我的猜测是正确的... –

回答

1

var data = [ 
 
    { 
 
     "date_from": "2017-05-06 00:00:00", 
 
     "date_to": "2017-05-08 23:59:59", 
 
     "event": "code jam" 
 
    }, 
 
    { 
 
     "date_from": "2017-05-03 00:00:00", 
 
     "date_to": "2017-05-07 23:59:59", 
 
     "event": "boxing day" 
 
    } 
 
]; 
 

 
var transformedData = data 
 
    .map(datum => [{date: datum.date_from.substr(0, 10)}, {date: datum.date_to.substr(0, 10)}]) 
 
    .reduce((allItems, items) => allItems.concat(items), []) 
 
    .map(item => ({date: item.date, state: {name:'San francisco'}})); 
 

 
console.log(transformedData);

+0

你硬编码旧金山? –

+0

那么,在你的例子中,你不解释它来自哪里...... –

2

首先,迭代的事件,则在事件日期回路和事件存储在这些日期:

var output=input.reduce(function(obj,event){ 
    for(var day=Math.floor(+new Date(event.date_from)/(1000*60*60*24)+1),max=Math.floor(+new Date(event.date_to)/(1000*60*60*24));day<=max;day++){ 
     (obj[day]=obj[day]||[]).push(event); 
    } 
return obj; 
},{}); 

然后创建一个数组出该对象的(并缩短日期):

Date.prototype.format=function(str){ 
var map={ 
    dd:this.getDate(), 
    mm:this.getMonth()+1, 
    yyyy:this.getFullYear() 
} 
return str.split("-").map(el=>map[el]||"00").join("-"); 
} 


var arr=[]; 
for(key in output){ 
    arr.push({date:new Date(key*1000*60*60*24).format("dd-mm-yyyy"),events:output[key]}); 
} 
console.log(arr); 

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

+0

这项工作,但这看起来太乱了,我的高级不会让我确信这个代码。 –

+0

@Giala杰斐逊,但你应该能够稍微... –

0

您可以使用前一个数组中的数据创建新数组。

var data = [{ 
 
     "date_from": "2017-05-06 00:00:00", 
 
     "date_to": "2017-05-08 23:59:59", 
 
     "event": "code jam" 
 
     }, 
 
     { 
 
     "date_from": "2017-05-03 00:00:00", 
 
     "date_to": "2017-05-07 23:59:59", 
 
     "event": "boxing day" 
 
     } 
 
    ]; 
 

 
    var newData =[] 
 
    data.forEach(function(item){ 
 
     newData.push({ 
 
     date:item['date_from'].slice(0, -9), // removing characters from last 
 
     state:{ 
 
     name:'Some State'} 
 
     })    
 

 
    }); 
 
    console.log(newData)