从Date数组返回唯一日期数组

时间:2017-05-17 22:36:32

标签: javascript angularjs typescript

在我们的angularjs应用程序中,我们收到一个日期数组,然后需要将其过滤掉,只返回一个充满独特日期(不是字符串)的数组。我在SO上尝试了一些答案,但我认为因为我正在比较日期而不是字符串 - 我会得到不同的结果。任何有关最佳方法的帮助都会非常有帮助。 enter image description here

2 个答案:

答案 0 :(得分:1)

你是对的,日期相等与字符串相等不同。两个日期永远不会相等。所以,让我们把日期变成字符串:

let dates = [new Date(), new Date('1/1/11'), new Date('1/1/11'), new Date('1/4/66')]


let uniqueDates = dates
                   .map(s => s.toString())
                   .filter((s, i, a) => a.indexOf(s) == i)
                   .map(s => new Date(s));
                   
console.log(uniqueDates);

indexOf的逻辑是每个唯一值只应出现在自己的位置;任何其他的都是重复的(s是当前项,我是当前索引,a是数组本身)。然后我们将数组映射回Dates并返回它。

答案 1 :(得分:1)

如果你正在使用lodash:

const date1 = new Date();
const date2 = new Date();
const arr = [date1, date1, date2, date2];
const uniqueDates = _.uniqBy(arr, date => date.getTime());

使用uniqBy确保我们按日期比较日期,而不仅仅按对象标识。见这里:Compare two dates with JavaScript