Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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
如何根据javascript对象数组的多个属性对其进行分组?_Javascript_Arrays_Json_Grouping - Fatal编程技术网

如何根据javascript对象数组的多个属性对其进行分组?

如何根据javascript对象数组的多个属性对其进行分组?,javascript,arrays,json,grouping,Javascript,Arrays,Json,Grouping,我想将showtimesData转换为showtimesByLocationByDate 你知道如何在不使用任何第三方库的情况下使用纯javascript吗?否则,我可以使用哪一个第三方库进行此操作 var showtimesData = [ {"location":"location1", "date":"31-12-2016", "time":"1:00"}, {"location":"location1", "date":"31-12-2016",

我想将
showtimesData
转换为
showtimesByLocationByDate


你知道如何在不使用任何第三方库的情况下使用纯javascript吗?否则,我可以使用哪一个第三方库进行此操作

    var showtimesData = [
        {"location":"location1", "date":"31-12-2016", "time":"1:00"},
        {"location":"location1", "date":"31-12-2016", "time":"2:00"},
        {"location":"location1", "date":"01-01-2017", "time":"3:00"},
        {"location":"location1", "date":"01-01-2017", "time":"4:00"},
        {"location":"location2", "date":"31-12-2016", "time":"1:00"},
        {"location":"location2", "date":"31-12-2016", "time":"2:00"},
        {"location":"location2", "date":"01-01-2017", "time":"3:00"},
        {"location":"location2", "date":"01-01-2017", "time":"4:00"},
    ];
    var showtimesByLocationByDate = [
        {
            "location":"location1",
            "dates":[
                {
                    "date":"31-12-2016",
                    "times":["1:00","2:00"]
                },
                {
                    "date":"01-01-2017",
                    "times":["3:00","4:00"]
                }
            ]
        },
        {
            "location":"location2",
            "dates":[
                {
                    "date":"31-12-2016",
                    "times":["1:00","2:00"]
                },
                {
                    "date":"01-01-2017",
                    "times":["3:00","4:00"]
                }
            ]
        },
    ];

此方案仅具有一个用于引用数组项的临时对象

var showtimesData=[{“地点”:“地点1”,“日期”:“31-12-2016”,“时间”:“1:00”},{“地点”:“地点1”,“日期”:“31-12-2016”,“时间”:“2:00”},{“地点”:“地点1”,“日期”:“01-01-2017”,“时间”:“3:00”},{“地点”:“地点1”,“日期”:“01-01-2017”,“时间”:“4:00”},{“地点”:“地点2”,“日期”:“31-12-2016”,“时间”:“1:00”},{“地点”:“地点2”,“日期”:“2016年12月31日”,“时间”:“2:00”},{“地点”:“地点2”,“日期”:“2017年1月1日”,“时间”:“3:00”},{“地点”:“地点2”,“日期”:“2017年1月1日”,“时间”:“4:00”},],
showtimesByLocationByDate=showtimesData.reduce(函数(r,a){
var o;
如果(!(a.在r.obj中的位置)){
o={地点:a.地点,日期:[]};
r、 obj[a.location]={dates:o.dates};
r、 阵列推送(o);
}
如果(!(r.obj[a.location]中的a.date){
o={date:a.date,times:[]};
r、 obj[a.location].dates.push(o);
r、 obj[a.location][a.date]=o.times;
}
r、 obj[a.location][a.date]。推送(a.time);
返回r;
},{array:[],obj:{}).array;

document.write(“”+JSON.stringify(showtimesByLocationByDate,0,4)+“”)我建议进行这种转换:

var showtimesData=[
{“地点”:“地点1”,“日期”:“2016年12月31日”,“时间”:“1:00”},
{“地点”:“地点1”,“日期”:“2016年12月31日”,“时间”:“2:00”},
{“地点”:“地点1”,“日期”:“2017年1月1日”,“时间”:“3:00”},
{“地点”:“地点1”,“日期”:“2017年1月1日”,“时间”:“4:00”},
{“地点”:“地点2”,“日期”:“2016年12月31日”,“时间”:“1:00”},
{“地点”:“地点2”,“日期”:“2016年12月31日”,“时间”:“2:00”},
{“地点”:“地点2”,“日期”:“2017年1月1日”,“时间”:“3:00”},
{“地点”:“地点2”,“日期”:“2017年1月1日”,“时间”:“4:00”},
];
var transformed=showtimesData.reduce(函数(obj,show){
//var{location,date,time}=show;//如果可以进行解构
变量位置=show.location,
日期=show.date,
time=show.time,
objLocation=obj[location]=obj[location]|{日期:{},
日期=objLocation.dates,
日期=日期[日期]=日期[日期]| |[];
推送日期(时间);
返回obj;
}, {});
results.innerHTML=JSON.stringify(已转换,空,'\t')

它必须遵循特定的格式吗?如果是对象的属性,则日期查找会快得多。如果要将日期设置为属性,是否可以循环通过属性以获取字符串形式的日期?是的,可以循环通过对象的属性。我在谷歌上搜索了一下,是否使用object.keys函数?日志
未捕获的语法错误:意外标记{
控制台
这是解构分配,您的浏览器还不支持。好的,将在不同的位置尝试browser@guest271314,不用担心,我会修改它,这样它现在就不用了。fwiw,在chromium 49中返回预期结果。也可以在Answer中包含解构版本吗?你的答案非常精确,但我只是习惯了有没有办法让它更通用?@Rajesh,这取决于数据结构以及它应该是如何通用的。我只是想知道我们是否可以创建一个函数,将数据和属性传递给group by,并返回一个分组值。下面是我尝试过的方法。