Javascript 如何将数据转换为React Native的SectionList的正确格式?
我有一个像这样的allPosts数组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', },
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;
}, []);