javascript - Javascript - 使用 lambda 按日期分组对象数组
问题描述
我有一组消息对象,比如这个:
const messages = [
{
id: "messageId",
text: "Hello!",
date: new Date("2021/01/01")
},
{
id: "messageId",
text: "Same day!",
date: new Date("2021/01/01")
},
{
id: "messageId",
text: "Another day!",
date: new Date("2021/01/02")
},
];
如您所见,每个对象都有一个原生的 JS 日期。如何使用 JavaScript lambda 按天将所有这些对象分组到一个数组中?这是预期的结果:
[
{
day: new Date("2021/01/01"),
data: [
{
id: "messageId",
text: "Hello!",
},
{
id: "messageId",
text: "Same day!",
},
]
},
{
day: new Date("2021/01/02"),
data: [
{
id: "messageId",
text: "Another day!",
},
]
},
];
解决方案
您可以使用reduce
object 首先创建对象并按日期(年-月-日)分组,然后使用Object.values
从该对象获取数组。
const messages = [
{
id: "messageId",
text: "Hello!",
date: new Date("2021/01/01")
},
{
id: "messageId",
text: "Same day!",
date: new Date("2021/01/01")
},
{
id: "messageId",
text: "Another day!",
date: new Date("2021/01/02")
},
];
const object = messages.reduce((r, { date: day, ...rest }) => {
const key = `${day.getFullYear()}-${day.getMonth()}-${day.getDate()}`
if (!r[key]) r[key] = {day, data: [rest]}
else r[key].data.push(rest)
return r;
}, {})
const result = Object.values(object)
console.log(result)
推荐阅读
- javascript - 无法使用 Cypress.io 测试页脚的背景颜色,它会引发错误
- r - 通过引用将类添加到 data.frame 列
- php - VB 数据集的 PHP 等价物是什么?
- python - 逐像素读取数组,得到 UnpicklingError
- python-3.x - PyCharm 错误,尝试并排除
- python - 使用 cdo 计算选定区域 lon lat 的平均值
- php - 尝试将值插入数据库时出错
- azure - 是否可以在 Microsoft Azure 中部署应用程序的 VM 中安装软件?
- windows - 如何将两个可执行文件打包成一个可执行文件,然后提取并运行它们?
- system-preferences - 为什么我的 Preference Pane 似乎认为它总是错误的架构?