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