独特的日期数组Javascript

前端之家收集整理的这篇文章主要介绍了独特的日期数组Javascript前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我看到这个问题经常被问到常规的 javascript数组,但是如果有一个日期数组,那么答案似乎都无法解决.

我可以通过试验错误解决这个问题,但如果我问的话,我确实看到了其他人的一些好处.

基本上如果你有一个javascript数组的日期可能有重复,需要过滤到一个没有重复的数组,最好的方法是什么?

我已经尝试了Array.from(new Set(arr))的ES6解决方案,但它只返回相同的数组.

我也试过了

Array.prototype.unique = function() {
    var a = [];
    for (var i=0,l=this.length; i<l; i++)
        if (a.indexOf(this[i]) === -1)
            a.push(this[i]);
    return a;
}

两者都来自Unique values in an array

但是没有工作,看起来像indexOf对日期对象不起作用.

这是我的数组生成atm的方式

//this is an array generated from ajax data,//its a year over year comparison with a separate year,//so to create a reliable date objects I force it to use the same year.
data.map(d => {
   dp = new Date(Date.parse(d.date + '-' + d.year));
   dp.setFullYear(2000);
   return dp;
})

它大约有100个左右不同的日子,但它总是以350左右的指数结束.

解决方法

如果通过===比较两个日期,则比较两个日期对象的引用.表示相同日期的两个对象仍然是不同的对象.

相反,比较Date.prototype.getTime()的时间戳:

function isDateInArray(needle,haystack) {
  for (var i = 0; i < haystack.length; i++) {
    if (needle.getTime() === haystack[i].getTime()) {
      return true;
    }
  }
  return false;
}

var dates = [
  new Date('October 1,2016 12:00:00 GMT+0000'),new Date('October 2,new Date('October 3,2016 12:00:00 GMT+0000')
];

var uniqueDates = [];
for (var i = 0; i < dates.length; i++) {
  if (!isDateInArray(dates[i],uniqueDates)) {
    uniqueDates.push(dates[i]);
  }
}

console.log(uniqueDates);

优化和错误处理取决于您.

猜你在找的JavaScript相关文章