【问题标题】:split from_date and to_date to a list of date range array将 from_date 和 to_date 拆分为日期范围数组列表
【发布时间】:2017-05-07 13:15:45
【问题描述】:

如何从这个数组转换

[
    {
        "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,我需要将数据放在日期范围列表中,以便可以使用日历插件进行映射。需要帮忙。

【问题讨论】:

  • 您希望它显示在中间的每个日期还是仅显示在开始/结束日期?
  • @Jonasw 每次约会,这是最大的挑战。
  • 那很好...我的猜测是正确的...

标签: javascript reactjs ecmascript-6 momentjs


【解决方案1】:

首先,遍历事件,然后遍历事件日期并将事件存储在这些日期:

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

【讨论】:

  • 这个工作,但是这看起来太乱了,无法维护,我的前辈肯定不会让我提交这个代码。
【解决方案2】:

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

 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)

【讨论】:

    【解决方案3】:

    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);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多