Javascript 按多个参数对对象数组进行分组

Javascript 按多个参数对对象数组进行分组,javascript,ecmascript-6,Javascript,Ecmascript 6,我试图通过传递我想要分组的键来对对象数组进行分组 作为我编写的函数的参数,例如,如果我有3个对象的数组: [{date: "2018-01-01", website: "example.com", revenue: 100}, {date: "2018-01-01", website: "example2.com", revenue:200}, {date: "2018-01-02", website: "example.com", revenue: 300}] 我将把它们传递给我的职能部

我试图通过传递我想要分组的键来对对象数组进行分组 作为我编写的函数的参数,例如,如果我有3个对象的数组:

[{date: "2018-01-01", website: "example.com", revenue: 100},
 {date: "2018-01-01", website: "example2.com", revenue:200},
 {date: "2018-01-02", website: "example.com", revenue: 300}]
我将把它们传递给我的职能部门:

    groupArr(arr, prop) {
        return arr.reduce(function (groups, item) {
            const val = item[prop];
            groups[val] = groups[val] || [];
            groups[val].push(item);
            return groups
        }, {})
    }
结果将是:
{2018-01-01:Array(2),2018-01-02:Array(1)}

但现在我正试图弄清楚如何更改此函数,以便传递两个参数,例如日期和网站:
groupArr(arr,[“date”,“website”]
因此,我的结果将包括group by两个参数,在我的例子中,这两个参数将以如下方式结束:

{[2018-01-01,“example.com”]:数组(1),[2018-01-01,“example2.com”]:数组(1),2018-01-02:Array(1)}

为了方便起见,我将结果键表示为数组,不确定这样做是否正确。
知道如何实现吗?谢谢,您可以创建一个由所需属性的值组成的新键

函数组arr(arr,…props){
返回arr.reduce(功能(组、项目){
const key=props.map(k=>item[k]).join(“|”);
组[键]=组[键]| |[];
组[键]。推送(项);
返回组;
}, {});
}
var数组=[{日期:“2018-01-01”,网站:“example.com”,收入:100},{日期:“2018-01-01”,网站:“example2.com”,收入:200},{日期:“2018-01-02”,网站:“example.com”,收入:300},{日期:“2018-01-01”,网站:“example.com”,收入:340};
grouped=groupArr(数组,“日期”,“网站”);
console.log(分组);

。作为控制台包装{max height:100%!important;top:0;}
您可以执行以下操作:

let arr=[{日期:“2018-01-01”,网站:“example.com”,收入:100},{日期:“2018-01-01”,网站:“example2.com”,收入:200},{日期:“2018-01-02”,网站:“example.com”,收入:300}];
功能组arr(arr,prop){
prop=Array.isArray(prop)?prop:[prop];//确保prop是数组。如果不是,则转换为数组
返回arr.reduce(功能(组、项目){
const val=prop.map(o=>item[o])。join('-');//映射和Concat prop的所有值并用作键
组[val]=组[val]| |[];
组[val]。推送(项);
返回组
}, {})
}
//如果道具是数组,则将起作用
let result=groupArr(arr,[“日期”,“网站]);
控制台日志(结果);
//如果字符串
设result2=groupArr(arr,日期);

log(result2);
谢谢,这也是一个很好的解决方案,它显示了将第二个参数作为数组传递