javascript - 从日期数组javascript中查找缺失的一天

标签 javascript angularjs arrays

我正在从 API 中获取日期数组:

0:{date: "2016-11-17T00:00:00",…}
1:{date: "2016-11-18T00:00:00",…}
2:{date: "2016-11-19T00:00:00",…}
3:{date: "2016-11-21T00:00:00",…}
4:{date: "2016-11-22T00:00:00",…}
5:{date: "2016-11-23T00:00:00",…}

在此示例中,数组缺少此日期:

{date: "2016-11-20T00:00:00",…}

从 Javascript 或 Angular 中的日期数组中查找缺失日期的最佳方法是什么?

这样我以后就可以将它作为禁用日传递给日期选择器。

最佳答案

检查一下:

  1. 首先,您可以使用 Array.prototype.sort

  2. 对数组进行排序(以防万一)
  3. 然后使用Array.prototype.reduce哈希表 来查找缺失的日期

下面的代码片段给出了演示:

var array=[
  {date:"2016-11-17T00:00:00"},
  {date:"2016-11-19T00:00:00"},
  {date:"2016-11-18T00:00:00"},
  {date:"2016-11-21T00:00:00"},
  {date:"2016-11-22T00:00:00"},
  {date:"2016-11-23T00:00:00"},
  {date:"2016-11-27T00:00:00"}
];

var result = array.sort(function(a,b){
   return Date.parse(a.date) - Date.parse(b.date);
}).reduce(function(hash){
  return function(p,c){
    var missingDaysNo = (Date.parse(c.date) - hash.prev) / (1000 * 3600 * 24);
    if(hash.prev && missingDaysNo > 1) {
      for(var i=1;i<missingDaysNo;i++)
        p.push(new Date(hash.prev+i*(1000 * 3600 * 24)));
    }
    hash.prev = Date.parse(c.date);
    return p;
  };
}(Object.create(null)),[]);

console.log(result);
.as-console-wrapper{top:0;max-height:100%!important;}

关于javascript - 从日期数组javascript中查找缺失的一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40654656/

相关文章:

javascript - 将类似的 JSON 对象分组到数组中

c++ - 初始化对象数组

java - 如何从返回 double 组的方法中获取所有 double 值?

arrays - 为什么 Swift 字典在内存过程中比数组慢得多

javascript - 用JS中对象的匹配项替换单词

javascript - 如何将 JMVC (javascript-mvc) 和服务器端 MVC 结合在一起

javascript - onDoubleClick asp 图像无法正常工作

drop-down-menu - AngularJS + Bootstrap 下拉: can't do ng-click in ng-repeat

javascript - 如何比较两个大对象数组的身份

angularjs - 更新帖子链接中的范围变量时,指令 View 不会更新