javascript - 如何在 JavaScript / Jquery 中按数组分组
问题描述
我有一个数组如下
array1 = [{"month":"January","location":"CENTRAL","percentage":94},
{"month":"February","location":"CENTRAL","percentage":97},
{"month":"March","location":"CENTRAL","percentage":93},
{"month":"January","location":"NORTH","percentage":95},
{"month":"February","location":"NORTH","percentage":91},
{"month":"March","location":"NORTH","percentage":98}];
我想将我的数组格式化为如下所示
array2= [{
location: "CENTRAL",
January: 94,
February: 97,
March: 93},
{
location: "NORTH",
January: 95,
February: 91,
March: 98}];
我尝试按如下功能使用分组
function groupBy(list, keyGetter) {
const map = new Map();
list.forEach((item) => {
const key = keyGetter(item);
if (!map.has(key)) {
map.set(key, [item]);
} else {
map.get(key).push(item);
}
});
return map;
}
const grouped = groupBy(array1, arr => arr.location);
console.log(grouped);
但我没有得到相同的格式。有什么建议请我在我的想法中缺少什么?非常感谢。
解决方案
您可以通过移交组密钥、密钥的密钥和收集的值来使用动态方法。
然后将所有键/值对添加到对象中,稍后返回映射的值。
function groupBy(list, group, key, value) {
return Array.from(list
.reduce((map, object) => map.set(object[group], Object.assign(
map.get(object[group]) || { [group]: object[group] },
{ [object[key]]: object[value] }
)), new Map)
.values()
);
}
var array = [{ month: "January", location: "CENTRAL", percentage: 94 }, { month: "February", location: "CENTRAL", percentage: 97 }, { month: "March", location: "CENTRAL", percentage: 93 }, { month: "January", location: "NORTH", percentage: 95 }, { month: "February", location: "NORTH", percentage: 91 }, { month: "March", location: "NORTH", percentage: 98 }],
result = groupBy(array, 'location', 'month', 'percentage');
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- sql - 如何从第一个表中选择第二个表中不可用的时间?
- excel - 将带有宏的标准 XLSM Excel 保存为 XLSB(Excel 二进制文件)
- python - 是否有像 keras 中带有 scikit 的生成器这样的选项来处理大量数据记录?
- android - 即使从缓存中加载图像,滑行也需要时间来加载图像?
- svg - 重新计算路径上的 SVG 变换并保留组
- azure - 从 Key Vault 机密部署 Web 应用证书并将其用于创建 SSL 绑定 - LinkedAuthorizationFailed
- firebase - firebase 如何仅部署 express() 应用程序的特定功能
- r - 每个 ID 的总和取决于另一个变量
- c - 如何将 CSV 文件中的数据存储到结构中,然后返回该结构
- java - 错误:不是实体。但@Entity 和 persistence.xml 正确