javascript - 如何将数组中的对象放入按日期排序的新数组中?
问题描述
我想在 React Native 中使用 SectionList。SectionList 需要渲染的数据如下所示:
sections=[
{
date: 'May 24 2019',
data: [
{
id:1,
msg: 'msg1',
date: 'May 24 2019'
},
{
id:2,
msg: 'msg2',
date: 'May 24 2019'
},
]},
{
date: 'May 25 2019',
data: [
{
id:3,
msg: 'msg1',
date: 'May 25 2019'
},
{
id:4,
msg: 'msg2',
date: 'May 25 2019'
},
]},
];
但是我从服务器收到的数据如下所示:
data:[
{
id:1,
msg: 'msg1',
date: 'May 24 2019'
},
{
id:2,
msg: 'msg2',
date: 'May 24 2019'
},
{
id:3,
msg: 'msg1',
date: 'May 25 2019'
},
{
id:4,
msg: 'msg1',
date: 'May 25 2019'
},
];
那么如何将“数据”转换为看起来像“部分”。我感谢您的帮助。对不起我的英语。
解决方案
您可以使用Array.reduce创建实际的分组,然后通过 Object.values 提取值:
let data = [ { id:1, msg: 'msg1', date: 'May 24 2019' }, { id:2, msg: 'msg2', date: 'May 24 2019' }, { id:3, msg: 'msg1', date: 'May 25 2019' }, { id:4, msg: 'msg1', date: 'May 25 2019' }, ];
let result = data.reduce((r,{ date, ...other}) => {
r[date] = r[date] || { date, data: [] }
r[date].data = [...r[date].data, { date, ...other }]
return r
}, {})
console.log(Object.values(result))
推荐阅读
- azure - 在 Cosmos DB 中,异地复制如何影响写入的 RU 消耗?
- swift - xcodebuild 归档 - 未捕获的异常:对象不能为 nil(键:IDEArchivePathOverride)
- javascript - 用 Javascript 发送电子邮件
- json - jsmn解析器:如果值与键名相同,则解析不正确
- flutter - Flutter - 笛卡尔图表 - 几分钟后我的图表开始覆盖自己
- php - 合并两个数组中的问题并删除php中的重复条目
- python - PyTorch 中模型的预测始终为 0(模型训练不起作用)
- python-3.x - 通过不在特定领域工作的 Lambda Python Dynamodb 订单
- java - 是否有等效于 spring EL #{someBean.someProperty} 的蓝图
- java - XmlMapper 将 XmlProperty 反序列化为 XmlElement