首页 > 解决方案 > 如何组合/合并日期,然后在打字稿中按升序排序

问题描述

如何在不重复或删除基于日期的相同日期数据的情况下合并或合并

[
  {date: "05/18/2021"},
  {date: "05/19/2021"},
  {date: "05/20/2021"},
  {date: "05/21/2021"},
  {date: "05/22/2021"},
  {date: "05/10/2021"},
  {date: "05/11/2021"},
  {date: "05/12/2021"},
  {date: "05/13/2021"},
  {date: "05/14/2021"},
  {date: "05/15/2021"},
  {date: "05/03/2021"},
  {date: "05/04/2021"},
  {date: "05/29/2021"},
  {date: "05/17/2021"},
  {date: "05/18/2021"},
  {date: "05/19/2021"},
  {date: "05/20/2021"},
  {date: "05/21/2021"},
  {date: "05/22/2021"},
  {date: "05/10/2021"},
  {date: "05/11/2021"},
  {date: "05/12/2021"},
  {date: "05/13/2021"},
  {date: "05/20/2021"},
  {date: "05/21/2021"},
  {date: "05/22/2021"},
  {date: "05/10/2021"},
  {date: "05/11/2021"},
  {date: "05/12/2021"},
  {date: "05/13/2021"},
  {date: "05/14/2021"},
  {date: "05/15/2021"}
]

如何合并重复数据并按升序排列日期顺序。

例如

[
  {date: "05/03/2021"},
  {date: "05/04/2021"},
  {date: "05/05/2021"},
  {date: "05/06/2021"},
  {date: "05/06/2021"},
  {date: "05/07/2021"},
  {date: "05/31/2021"},
  {date: "05/08/2021"},
  {date: "05/31/2021"},
  {date: "05/24/2021"},
  {date: "05/25/2021"},
  {date: "05/26/2021"}
]

[
  {date: "05/03/2021"},
  {date: "05/04/2021"},
  {date: "05/05/2021"},
  {date: "05/06/2021"},
  {date: "05/07/2021"},
  {date: "05/08/2021"},
  {date: "05/24/2021"},
  {date: "05/25/2021"},
  {date: "05/26/2021"},
  {date: "05/31/2021"}
]

我要做的是合并重复的日期并按升序排列。

标签: javascripttypescript

解决方案


鉴于对象结构就像您提供的那样:

  • 首先,使用Set删除重复项,因为 Set 将允许您存储唯一值。记得在添加到 Set 之前对对象进行字符串化,因为{ date: "05/18/2021" }{ date: "05/18/2021" }是两个不同的对象引用,但相同的原始字符串值

Set对象允许您存储任何类型的唯一值,无论是原始值还是对象引用

  • 按日期排序,通过转换为 Date 和 getTime

const data = [ { date: "05/18/2021" }, { date: "05/19/2021" }, { date: "05/20/2021" }, { date: "05/21/2021" }, { date: "05/22/2021" }, { date: "05/10/2021" }, { date: "05/11/2021" }, { date: "05/12/2021" }, { date: "05/13/2021" }, { date: "05/14/2021" }, { date: "05/15/2021" }, { date: "05/03/2021" }, { date: "05/04/2021" }, { date: "05/29/2021" }, { date: "05/17/2021" }, { date: "05/18/2021" }, { date: "05/19/2021" }, { date: "05/20/2021" }, { date: "05/21/2021" }, { date: "05/22/2021" }, { date: "05/10/2021" }, { date: "05/11/2021" }, { date: "05/12/2021" }, { date: "05/13/2021" }, { date: "05/20/2021" }, { date: "05/21/2021" }, { date: "05/22/2021" }, { date: "05/10/2021" }, { date: "05/11/2021" }, { date: "05/12/2021" }, { date: "05/13/2021" }, { date: "05/14/2021" }, { date: "05/15/2021" }, ]

const rejectDuplicates = arr => {
  return Array.from(
    arr
      .map(el => JSON.stringify(el))
      .reduce((set, el) => set.add(el), new Set())
  ).map(el => JSON.parse(el))
}

const compareDateFn = ({ date: dateA }, { date: dateB }) => {
  const timeA = new Date(dateA).getTime()
  const timeB = new Date(dateB).getTime()
  return timeA - timeB
}

const res = rejectDuplicates(data).sort(compareDateFn)

console.log(res)


推荐阅读