我坦率地承认,JavaScript不是我最擅长的语言,React Native是一种非常新的语言,所以,可能有一种明显简单的方法来做到这一点,我没有看到。
我有一个API,它以简单的结构呈现一些交易数据:
[
{
"id": 1,
"title": "Apple Store",
"date": "2021-09-10",
"amount": "$100.00",
},
{
"id": 41,
"title": "Zulauf, Walter and Metz",
"date": "2021-09-10",
"amount": "$14.00",
},
{
"id": 9,
"title": "Aufderhar PLC",
"date": "2021-09-09",
"amount": "$78.00",
},
{
"id": 10,
"title": "Bayer and Sons",
"date": "2021-09-07",
"amount": "$67.00",
}
]
我想使用SectionList组件来显示这些数据,并按日期将事务放在各个部分中。我(可能是粗略的)试图解决这个问题,将这些数据转换为以下结构:
[
{
"date": "2021-09-10",
"transactions": [
{
"id": 1,
"title": "Apple Store",
"date": "2021-09-10",
"amount": "$100.00",
},
{
"id": 41,
"title": "Zulauf, Walter and Metz",
"date": "2021-09-10",
"amount": "$14.00",
}
]
},
{
"date": "2021-09-09",
"transactions": [
{
"id": 9,
"title": "Aufderhar PLC",
"date": "2021-09-09",
"amount": "$78.00",
}
]
},
{
"date": "2021-09-07",
"transactions": [
{
"id": 10,
"title": "Bayer and Sons",
"date": "2021-09-07",
"amount": "$67.00",
}
]
}
]
但老实说,我不知道如何转换这些数据(或者是否有更好的方法来解决这个问题)。我开始使用Lodash的groupBy函数,这看起来很有前途,但看起来SectionList不需要对象,它需要一个数组。
将groupBy的输出转换为数组直接删除了键,我得到了分组数据,但没有明确的节头值。
同样,可能有一些非常简单的方法来解决这个问题,数据总是以平面数组的形式出现。我感谢任何人的指导、帮助或例子。
6条答案
按热度按时间eagi6jfj1#
给定一个数组,只要你的结果期望有相同数量的元素,就使用
map
,但是因为你的结果有不同数量的元素,就使用reduce
,如上所示。这个想法是通过reduce
,在每个元素上循环,看看是否能找到元素,并将当前元素推入列表0sgqnhkj2#
lodash
groupBy
只是帮助你分组数据,你应该通过将其转换为你的格式来处理分组数据。wrrgggsh3#
简单
5lhxktic4#
使用lodash,你可以按
date
分组,然后Map到所需的表单:xu3bshqb5#
你可以用loadash
tez616oj6#
下面是我写的一个TypeScript实用函数,它可以做类似的事情:
关于上述数据:
对于多个密钥: