javascript - 如何组合/合并日期,然后在打字稿中按升序排序
问题描述
如何在不重复或删除基于日期的相同日期数据的情况下合并或合并
[
{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"}
]
我要做的是合并重复的日期并按升序排列。
解决方案
鉴于对象结构就像您提供的那样:
- 首先,使用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)
推荐阅读
- c# - 是否可以仅针对一项操作忽略 ServiceFilter 控制器?
- android - 浮动键盘
- python - 如何在 Python 中测试运行 http.server?
- assembly - 当我们使用 Windows 操作系统时,如何在 ms dos 映像文件中添加引导扇区?
- python - Lassocv 的嵌套交叉验证
- html - 在 Vue 上使用 for-loop 做模态
- javafx - JavaFX WebView 在返回 WebEngine 之前获取网址
- android - 内含 ListView 的 AlertDialog 不能关闭?
- sass - 如何使用汇总插件 node-sass 缩小 CSS
- templates - XSL-FO 如何将页码从模板传播到另一个