Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用loadash/javascript嵌套多个groupby_Javascript_Arrays_Object_Ecmascript 6_Lodash - Fatal编程技术网

如何使用loadash/javascript嵌套多个groupby

如何使用loadash/javascript嵌套多个groupby,javascript,arrays,object,ecmascript-6,lodash,Javascript,Arrays,Object,Ecmascript 6,Lodash,先谢谢你能帮助我的人。我正在尝试使用React Native中的SectionList显示数据。我已经在下面编写了我的代码,显示了我试图实现的目标。一个常规的javascript解决方案可以工作。我希望数据首先按日期分组,在该日期内,我需要按位置分组 重要的是它有一个标题和数据键 我有以下格式的数据: [ { game_id: 1171, date: '2018-11-17', location: 'Plaza' }, { game_id: 1189, date

先谢谢你能帮助我的人。我正在尝试使用React Native中的SectionList显示数据。我已经在下面编写了我的代码,显示了我试图实现的目标。一个常规的javascript解决方案可以工作。我希望数据首先按日期分组,在该日期内,我需要按位置分组

重要的是它有一个标题和数据键 我有以下格式的数据:

[ { game_id: 1171,
    date: '2018-11-17',
    location: 'Plaza'
   },
  { game_id: 1189,
    date: '2018-11-17',
    location: 'Field - Kickball'
   },
   { game_id: 1489,
    date: '2018-11-16',
    location: 'Field - Kickball'
   },
   { game_id: 1488,
    date: '2018-11-16',
    location: 'Field - Soccer'
   }
]
我需要输出显示:

data = [{
    title: "2018-11-17",
    data: [{
            title: "Field - Kickball",
            data: [{
                game_id: 1189,
                date: '2018-11-17',
                location: 'Field - Kickball'
            }]
        },
        {
            title: "Plaza",
            data: [{
                game_id: 1171,
                date: '2018-11-17',
                location: 'Plaza'
            }]
        }
    ]
    },
    {
        title: "2018-11-16",
        data: [{
                title: "Field - Kickball",
                data: [{
                    game_id: 1489,
                    date: '2018-11-16',
                    location: 'Field - Kickball'
                }]
            },
            {
                title: "Field - Soccer",
                data: [{
                    game_id: 1488,
                    date: '2018-11-16',
                    location: 'Field - Soccer'
                }]
            }
        ]
    }
]

我已经试过了

const games = [data here]
var groups = _(games)
.groupBy(x => x.date)
        .map(value => {
            return _.groupBy(value, 'location')
            .map(({key, value}) => ({title: key, data: value}))
        })

        .map((value, key) => {
            return ({title: value[Object.keys(value)[0]][0].date, data: value})
        })

像这样使用
reduce

const data=[{game_id:1171,日期:'2016-11-17T05:00:00.000Z',时间:'08:00:00',类别:'chb Coed',背景:'#ffffff00',文本颜色:'#000000',粗体:0,运动:'Newcomb',位置:'Plaza',文本:'COL2 vs.usa1171'],{游戏id:1189,日期:'2016-11-17T05:00:00.000Z',时间:'08:50:00',类别:'Cha Coed',背景:'FF33CC',文本颜色:'#000000',粗体:0,运动:'Kickball',位置:'Field Kickball',文本:'COL1 vs.USA1 1189',{游戏id:1489,日期:'2016-2-17T05:00:00.000Z',时间:'04:50:00',类别:'Ch B Coed',背景:'FF33CC',文本颜色:'#000000',粗体:0,运动:'Kickball',位置:'Field Kickball',文本:'COL2 vs.USA3 1489';
const res=Object.values(data.reduce((acc,{date,{rest})=>acc[date]?{……acc[date]:{……acc[date],data:acc[date]。data.concat({date,{rest}}}:{……acc[date]:{title:date data:[{date date rest,{rest}}}}}}},});
console.log(res);

.as console wrapper{max height:100%!important;top:auto;}
如果我遗漏了什么,请原谅,但对我来说,这似乎可以通过以下方式以更简单的方式完成:

let data=[{游戏id:1171,日期:'2016-11-17T05:00:00.000Z',时间:'08:00:00',类别:'Ch B Coed',背景:'FFFFFF00',文本颜色:'000000',粗体:0,运动:'Newcomb',位置:'Plaza',文本:'COL2 vs.USA1 1171',{游戏id:1189,日期:'2016-11-17T05:00:00.000Z',时间:'08:50:00',类别:'Ch A Coed',背景:'FF33CC',文本颜色:'#000000',粗体:0,运动:'Kickball',位置:'Field Kickball',文本:'COL1 vs.USA1 1189'},{游戏id:1489,日期:'2016-2-17T05:00:00.000Z',时间:'04:50:00',类别:'CHB Coed',背景:'FF33CC',文本颜色:'000000',粗体:0,运动:'Kickball',位置:'Field-Kickball',文本:'COL2 vs USA31489']
让结果=数据。减少((r,c)=>{
r[c.date]=r[c.date]|{标题:c.date,数据:[]}
r[c.date]。数据=[…(r[c.date]。数据| |[]),c]
返回r
}, {})

console.log(Object.values(result))
您也可以编写预期的输出吗?预期的值是以“我需要输出显示:”开头的代码:别担心@EyalAbadi,如果我的答案解决了你的问题,请点击我答案左边的灰色勾号来接受。是的,它会-它会将
日期
和所有其他属性收集到变量中,然后将它们排列到
标题
数据
中。对不起,我实际上把预期的输出搞乱了。我的意思是inside每天都会有另一个标题和数据,这些标题和数据都由字段分隔。我真正需要的是
[{title:“2016-11-17T05:00:00.000Z”,数据:[title:“Field-Kickball”数据:{游戏id:1489,日期:'2016-2-17T05:00:00.000Z',时间:'04:50:00',类别:'CHB Coed',背景:'FF33CC',文本颜色:'000000',粗体:0,运动:'Kickball',位置:'Field-Kickball',文本:'COL2 vs USA31489'},…
嘿,谢谢你的回答。我实际上把预期的输出搞乱了。你能再帮我一次吗?你输入的东西到处都是。你能格式化并确保你输入的日期与你的输出分组相匹配吗?你的日期不符合你想要的分组方式。它们必须先匹配,然后按位置分组等等。我有你更新了预期结果!提前谢谢!我一直在努力找出解决方案。我在你的另一个帖子中发布了一个答案。我想这样更好,因为你已经有了一个公认的答案等。