Reactjs 在React Native SectionList中合并相同的标题数据
在React Native SectionList中,标题和数据的数据如下(针对我的示例进行了修改):Reactjs 在React Native SectionList中合并相同的标题数据,reactjs,react-native,Reactjs,React Native,在React Native SectionList中,标题和数据的数据如下(针对我的示例进行了修改): const数据=[ { 标题:"主菜",, 数据:[“比萨饼”、“汉堡”、“意大利调味饭”], }, { 标题:"双方",, 数据:[“炸薯条”、“洋葱圈”、“炸虾”], }, { 标题:"饮品",, 数据:[“水”、“可乐”、“啤酒”], }, { 标题:"双方",, 数据:[“奶酪蛋糕”、“冰淇淋”], }, ]; 如您所见,有两个侧面标题。是否有一种简单的方法可以合并两个数据数组,如下所
const数据=[
{
标题:"主菜",,
数据:[“比萨饼”、“汉堡”、“意大利调味饭”],
},
{
标题:"双方",,
数据:[“炸薯条”、“洋葱圈”、“炸虾”],
},
{
标题:"饮品",,
数据:[“水”、“可乐”、“啤酒”],
},
{
标题:"双方",,
数据:[“奶酪蛋糕”、“冰淇淋”],
},
];代码>
如您所见,有两个侧面
标题。是否有一种简单的方法可以合并两个数据数组
,如下所示:
数据:[“炸薯条”、“洋葱圈”、“炸虾”、“奶酪蛋糕”、“冰淇淋”]
由于我的数据是随机输入的,所以可以通过这种方式输入数据。这是我的密码
`fbDb.ref(“作业”)
.orderByChild('driver_key'))
.equalTo(global.session.user.key)
.once('value',快照=>{
const result = [];
let dayData = { title: "", data: [] };
let data = snapshot.val();
for (const [key, value] of Object.entries(data)) {
const timestamp = data[key].status_rfc; //Get timestamp of completed time
const date = moment(timestamp).format("YYYY MM"); //Change to 2020 02 for date sorting
if (dayData.title === date) { //If date exists add it to that section header
dayData.data.push(data[key]);
} else { //Otherwise add as new entry
dayData = { title: date, data: [data[key]] };
result.push(dayData);
}
}
this._isMounted && this.setState({
myData: result,
loading: false,
});
});`
正如您所见,只有在数据已经按日期排序的情况下,它才会起作用。是否有一种简单的方法可以对常见标题进行分组
谢谢你的请求:
正如你所看到的,有两个标题。有没有简单的合并方法
这两个数据数组如下所示:
数据:[“炸薯条”、“洋葱圈”、“炸虾”、“奶酪蛋糕”,
“冰淇淋”]
只需应用javascript
const DATA = [
{
title: 'Main dishes',
data: ['Pizza', 'Burger', 'Risotto'],
},
{
title: 'Sides',
data: ['French Fries', 'Onion Rings', 'Fried Shrimps'],
},
{
title: 'Drinks',
data: ['Water', 'Coke', 'Beer'],
},
{
title: 'Sides',
data: ['Cheese Cake', 'Ice Cream'],
},
];
var filter_data = {};
DATA.forEach(e => {
if(filter_data[e.title] != undefined){
filter_data[e.title].data = [...filter_data[e.title].data, ...e.data]
}else{
filter_data[e.title] = e;
}
});
var _data = Object.values(filter_data);
console.log(_data);
output:
[{"title":"Main dishes","data":["Pizza","Burger","Risotto"]},
{"title":"Sides","data":["French Fries","Onion Rings","Fried Shrimps","Cheese
Cake","Ice Cream"]},{"title":"Drinks","data":["Water","Coke","Beer"]}]
如果您不反对使用lodash,此解决方案可能会帮助您:
const groupedByTitle = _.groupBy(DATA, "title");
const groupedData = [];
for (const key of Object.keys(groupedByTitle)) {
const values = groupedByTitle[key].map(value => value.data).flat();
const group = { title: key, data: values };
groupedData.push(group);
}
您要查找的数据将在groupedData数组中-这也将支持标题可能出现两次以上的情况。您应该看看lodash的groupBy函数。