gpt4 book ai didi

javascript - 按多个参数对对象数组进行分组

转载 作者:行者123 更新时间:2023-11-30 14:33:15 27 4
gpt4 key购买 nike

我正在尝试通过传递我想要分组的键来对对象数组进行分组 作为我编写的函数的参数,例如,如果我有这个包含 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"] 这样我的结果将包含两个参数的分组,在我的例子中最终会像这样:

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

为了方便起见,我将结果键作为数组呈现,但不确定这样做是否正确。知道我该如何实现吗?谢谢

最佳答案

您可以创建一个由所需属性的值组成的新键。

function groupArr(arr, ...props) {
return arr.reduce(function (groups, item) {
const key = props.map(k => item[k]).join('|');
groups[key] = groups[key] || [];
groups[key].push(item);
return groups;
}, {});
}
var array = [{ 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 }, { date: "2018-01-01", website: "example.com", revenue: 340 }];
grouped = groupArr(array, "date", "website");

console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 按多个参数对对象数组进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50833712/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com