首页 > 解决方案 > 如何将数组中的对象放入按日期排序的新数组中?

问题描述

我想在 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'
  },
];

那么如何将“数据”转换为看起来像“部分”。我感谢您的帮助。对不起我的英语。

标签: javascriptarraysreact-native

解决方案


您可以使用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))


推荐阅读