如何从对象数组中获取唯一的日期值

use*_*695 2 javascript arrays object isodate

我需要以格式获取多个日期值的所有唯一日期DD.MM.。在此示例数据中,12 月 24 日有两个值:

const data = [
    { date: ISODate("2019-12-24T03:24:00Z") },
    { date: ISODate("2019-12-24T04:56:00Z") },
    { date: ISODate("2019-12-25T02:34:00Z") },
    { date: ISODate("2019-12-26T01:23:00Z") }
]
Run Code Online (Sandbox Code Playgroud)

所以结果应该是

const result = [
    '24.12.',
    '25.12.',
    '26.12.'
]
Run Code Online (Sandbox Code Playgroud)

因此,首先我将映射我的数据并仅拆分日期的值:

const dates = data.map(d => d.date.toString().split('T')[0])
Run Code Online (Sandbox Code Playgroud)

但是如何获取唯一值并更改输出格式?


更新

我想出了这个,但看起来很复杂......

data.map(d => {
  const dateSplit = d.date.toString().split('T')[0].split('-')
  return dateSplit[2] + '.' + dateSplit[1] + '.'
})
.filter((value, index, self) {
  return self.indexOf(value) === index
})
Run Code Online (Sandbox Code Playgroud)

Ori*_*ori 5

看起来 ISODate 返回一个标准的 JS Date 对象。您可以使用Date.getDate()来获取日期,并Date.getMonth()获取月份(从 0 开始,所以我们需要加 1):

const data = [
  { date: new Date('2019-12-24T03:24:00Z') },
  { date: new Date('2019-12-24T04:56:00Z') },
  { date: new Date('2019-12-25T02:34:00Z') },
  { date: new Date('2019-12-26T01:23:00Z') }
]

const result = [...new Set(data.map(({ date: d }) => 
  `${d.getDate()}.${d.getMonth() + 1}.`
))]

console.log(result)
Run Code Online (Sandbox Code Playgroud)

之前的回答:

使用正则表达式来匹配月份和日期,并使用解构将它们分配给 const。使用模板文字组装字符串。通过将值分配给 Set,然后散布回数组来删除重复项。

注意:由于我无权访问 ISODate,因此我已将其删除。我离开了.toString(),虽然在本例中不需要它,但与 ISODate 一起使用时需要它。

const data = [
  { date: '2019-12-24T03:24:00Z' },
  { date: '2019-12-24T04:56:00Z' },
  { date: '2019-12-25T02:34:00Z' },
  { date: '2019-12-26T01:23:00Z' }
]

const pattern = /-([0-9]{2})-([0-9]{2})T/

const result = [...new Set(data.map(d => {
  const [, mon, day] = d.date.toString().match(pattern)
  
  return `${day}.${mon}.`;
}))]

console.log(result)
Run Code Online (Sandbox Code Playgroud)