Javascript 如何将数据转换为React Native的SectionList的正确格式?

Javascript 如何将数据转换为React Native的SectionList的正确格式?,javascript,arrays,react-native,javascript-objects,Javascript,Arrays,React Native,Javascript Objects,我有一个像这样的allPosts数组 const allPosts = [ { date: '2017-06-06', imageUrl: 'image1_06-06', }, { date: '2017-06-06', imageUrl: 'image2_06-06', }, { date: '2017-06-07', imageUrl: 'image1_06-07', },

我有一个像这样的allPosts数组

const allPosts = [
    {
      date: '2017-06-06',
      imageUrl: 'image1_06-06',
    },
    {
      date: '2017-06-06',
      imageUrl: 'image2_06-06',
    },
    {
      date: '2017-06-07',
      imageUrl: 'image1_06-07',
    },
    {
      date: '2017-06-07',
      imageUrl: 'image2_06-07',
    }
];
对于React Native的分区列表,它需要这样组织

我很难想出如何深入推送每个日期键的数据

如果这很重要的话,allPosts实际上有超过imageUrl的内容,但为了简单起见,我删除了额外的数据

这是你想要的吗

const allPosts=[ { 日期:“2017-06-06”, imageUrl:'image1_06-06', }, { 日期:“2017-06-06”, imageUrl:'image2_06-06', }, { 日期:“2017-06-07”, imageUrl:“image1_06-07”, }, { 日期:“2017-06-07”, imageUrl:“image2_06-07”, } ]; var键=[]; var PostsByDate=[]; 对于所有POST中的var i{ var date=allPosts[i]。日期; var temp_img=[]; 所有帖子中的forvar j{ ifallPosts[j].日期==日期{ temp_img.push{imageUrl:allPosts[j].imageUrl}; } } var obj={data:temp\u img,key:date}; PostsByDate.pushobj; } console.logPostsByDate 这是你想要的吗

const allPosts=[ { 日期:“2017-06-06”, imageUrl:'image1_06-06', }, { 日期:“2017-06-06”, imageUrl:'image2_06-06', }, { 日期:“2017-06-07”, imageUrl:“image1_06-07”, }, { 日期:“2017-06-07”, imageUrl:“image2_06-07”, } ]; var键=[]; var PostsByDate=[]; 对于所有POST中的var i{ var date=allPosts[i]。日期; var temp_img=[]; 所有帖子中的forvar j{ ifallPosts[j].日期==日期{ temp_img.push{imageUrl:allPosts[j].imageUrl}; } } var obj={data:temp\u img,key:date}; PostsByDate.pushobj; } console.logPostsByDate 试试这个

const allPosts=[ { 日期:“2017-06-06”, imageUrl:'image1_06-06', }, { 日期:“2017-06-06”, imageUrl:'image2_06-06', }, { 日期:“2017-06-07”, imageUrl:“image1_06-07”, }, { 日期:“2017-06-07”, imageUrl:“image2_06-07”, } ]; var o={} allPosts.mapitem=>{ o[item.date]=o[item.date]|{key:item.date} 如果o[item.date].data{ o[item.date].data.push{imageUrl:item.imageUrl} }否则{ o[item.date].data=[{imageUrl:item.imageUrl}] } } var PostByDate=Object.keyso.mapval=>{ 返回o[val] } console.logPostByDate试试这个

const allPosts=[ { 日期:“2017-06-06”, imageUrl:'image1_06-06', }, { 日期:“2017-06-06”, imageUrl:'image2_06-06', }, { 日期:“2017-06-07”, imageUrl:“image1_06-07”, }, { 日期:“2017-06-07”, imageUrl:“image2_06-07”, } ]; var o={} allPosts.mapitem=>{ o[item.date]=o[item.date]|{key:item.date} 如果o[item.date].data{ o[item.date].data.push{imageUrl:item.imageUrl} }否则{ o[item.date].data=[{imageUrl:item.imageUrl}] } } var PostByDate=Object.keyso.mapval=>{ 返回o[val] }
console.logPostByDate我认为您应该学习如何使用map、filter和reduce,因为在更改数据结构时,您将一直需要它们。以下是使用reduce完成的非常干净的解决方案:


我认为您应该学习如何使用map、filter和reduce,因为在更改数据结构时,您将一直需要它们。以下是使用reduce完成的非常干净的解决方案:


谢谢@henrik R!这就是我一直在走的路,但没有成功。我一回到家就去试试。效果很好,教会了我很多。谢谢很高兴听到。我建议看一下这个播放列表,了解更多关于功能javascript编程的信息:谢谢@henrik R!这就是我一直在走的路,但没有成功。我一回到家就去试试。效果很好,教会了我很多。谢谢很高兴听到。我建议观看此播放列表,以了解有关功能性javascript编程的更多信息:
const postsByDate = [
    {
      data: [{ imageUrl: 'image1_06-06' }, { imageUrl: 'image2_06-06' }],
      key: '2017-06-06',
    },
    {
      data: [{ imageUrl: 'image1_06-07' }, { imageUrl: 'image2_06-07' }],
      key: '2017-06-07',
    },
];
const postsByDate = allPosts.reduce((acc, post) => {
  const foundIndex = acc.findIndex(element => element.key === post.date);
  if (foundIndex === -1) {
    return [
      ...acc, 
      {
        key: post.date,
        data: [{imageUrl: post.imageUrl}],
      },
    ];
  }
  acc[foundIndex].data = [...acc[foundIndex].data, {imageUrl: post.imageUrl}];
  return acc;
}, []);