我正在尝试从日期数组中删除重复日期,如
let dates = ["date1","date2","date1","date3"];
我将日期转换为Set但是它不会删除重复,但是当我尝试使用其他数据类型而不是Date工作时,问题出在哪里?
let uniq = dates => [...new Set(dates)
];
答案 0 :(得分:2)
因为您的日期是对象,我们将通过引用进行比较。虽然两个对象具有相同的属性,但它们不能相等。
const a = { name: 'Test' }
和const b = { name = 'Test' }
具有相同的值,但它们的引用(内存中的地址)不相等。那么为什么Set在你的情况下不起作用。
您可以使用他们的字符串表示。字符串将通过值进行比较。在这种情况下,const a = 'Test'
和const b = 'Test'
是相同的。使用toString
函数映射它们,然后将它们插入到Set中。相同的日期将具有相同的字符串表示,因此它们不是唯一的。
const dates = [
new Date(), // Will be the same as the below 3 dates at runtime
new Date(),
new Date(),
new Date(),
new Date(2015, 1, 1)
];
const uniqueDates = [...new Set(dates.map(date => date.toString()))];
console.log(uniqueDates);