Reactjs 在React Native SectionList中合并相同的标题数据

Reactjs 在React Native SectionList中合并相同的标题数据,reactjs,react-native,Reactjs,React Native,在React Native SectionList中,标题和数据的数据如下(针对我的示例进行了修改): const数据=[ { 标题:"主菜",, 数据:[“比萨饼”、“汉堡”、“意大利调味饭”], }, { 标题:"双方",, 数据:[“炸薯条”、“洋葱圈”、“炸虾”], }, { 标题:"饮品",, 数据:[“水”、“可乐”、“啤酒”], }, { 标题:"双方",, 数据:[“奶酪蛋糕”、“冰淇淋”], }, ]; 如您所见,有两个侧面标题。是否有一种简单的方法可以合并两个数据数组,如下所

在React Native SectionList中,标题和数据的数据如下(针对我的示例进行了修改):

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函数。