gpt4 book ai didi

javascript - 将对象数组转换为包含对象数组的对象(复杂)

转载 作者:行者123 更新时间:2023-11-30 20:28:09 27 4
gpt4 key购买 nike

我正在使用 React Native Calendars 并尝试为议程组件构建我的数据。

预期的数据结构是(一个对象)

{
'2012-05-22': [{text: 'item 1 - any js object'}],
'2012-05-23': [{text: 'item 2 - any js object'}],
'2012-05-24': [],
'2012-05-25': [{text: 'item 3 - any js object'},{text: 'any js object'}],
}`

从我的 api 获取事件时,事件以以下格式返回(对象数组)`

 let eventsFetchedFromApi = [
{startDateTime:"2018-02-01T11:10:43", comments: "First Event"},
{startDateTime:"2018-03-01T11:12:43", comments: "Third Event"},
{startDateTime:"2018-02-01T11:18:43", comments: "Second Event"},
]`

我设法使用以下代码将我的对象数组转换为一个对象(不幸的是它不是很可读,至少对我来说不是)。

let transformedEvents = Object.assign(...eventsFetchedFromApi.map(({ startDateTime, comments }) => ({ [startDateTime.substring(0, 10)]: [{comments: [comments]}] })));  

“transformedEvents”的结构是(几乎在那里)

{
"2018-02-01":[{"comments": ["First Event"]}],
"2018-03-01":[{"comments": ["Third Event"]}]
}

如您所见,3 个事件中只显示了 2 个。如果事件具有相同的日期,则只会显示一个。我想要的输出是

{
"2018-02-01":[{"comments": "First Event"}, {"comments": "Second Event"}],
"2018-03-01":[{"comments": "Third Event"}]
}

**我需要将具有相同日期的事件组合在一起。任何人都可以帮助我获得我想要的数据结构吗?我不确定如何解决这个问题。谢谢**

最佳答案

您可以使用 reduce 将一组对象分组为一个由日期字符串索引的对象。如果输入和输出项不是一对一的(如您的情况),则不能使用 map

const eventsFetchedFromApi=[{startDateTime:"2018-02-01T11:10:43",comments:"First Event"},{startDateTime:"2018-03-01T11:12:43",comments:"Second Event"},{startDateTime:"2018-02-01T11:18:43",comments:"Third Event"}];
const output = eventsFetchedFromApi.reduce((a, { startDateTime, comments }) => {
const prop = startDateTime.slice(0, 10);
if (!a[prop]) a[prop] = [];
a[prop].push({ comments });
return a;
}, {});
console.log(output);

关于javascript - 将对象数组转换为包含对象数组的对象(复杂),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50654232/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com