【发布时间】:2017-03-13 19:22:30
【问题描述】:
我看到这个问题经常被问到常规的 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;
}
但是两者都不起作用,看起来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 个索引。
【问题讨论】:
-
这可能会有所帮助:stackoverflow.com/questions/492994/…
-
将每个日期放在一个集合中。
-
绝对是正确的方向,只需要找出一种使用它来过滤数组的方法,宁愿在不创建其他变量的情况下内联,无论如何我都会尝试这个想法,谢谢@mparnisari
-
如果我理解正确你想要一组数据? developer.mozilla.org/en/docs/Web/JavaScript/Reference/… "Set 对象是值的集合,可以按插入顺序迭代其元素。Set 中的值只能出现一次;它在 Set 的集合中是唯一的。"
-
@JordanRamstad
.map将所有 Date 对象序列化为字符串 -> 将它们添加到 Set -> 从 Set 创建新数组 ->map到 Date 对象中。或者通过维护所有序列化日期的查找来简单地filter。可能在一个集合中。所以过滤函数将类似于if (Date_as_string in my_lookup) { discard } else { add it to the set and return true}
标签: javascript arrays date