javascript - 在 JavaScript 中按键值将集合分组为集合集合
问题描述
我有一系列如下项目:
[
{ Number: 1, Description: "Example description 1"},
{ Number: 1, Description: "Example description 2"},
{ Number: 2, Description: "Example description 3"},
{ Number: 2, Description: "Example description 4"}
]
我想按Number
属性对其进行分组以获得下一个结果:
[
[
{ Number: 1, Description: "Example description 1"},
{ Number: 1, Description: "Example description 2"}
]
[
{ Number: 2, Description: "Example description 3"},
{ Number: 2, Description: "Example description 4"}
]
]
下一个功能几乎对我有用:
var groupBy = function(xs, key) {
return xs.reduce(function(rv, x) {
(rv[x[key]] = rv[x[key]] || []).push(x);
return rv;
}, {});
}
但它返回带有属性的对象,其中每个属性都是一个数组。这使我无法在其上使用map
功能。
我怎样才能克服这个问题以获得能够使用的数组数组map
?
解决方案
您可以从对象中获取值。
const
groupBy = function(xs, key) {
return Object.values(xs.reduce(function(rv, x) {
(rv[x[key]] = rv[x[key]] || []).push(x);
return rv;
}, {}));
},
data = [{ Number: 1, Description: "Example description 1" }, { Number: 1, Description: "Example description 2" }, { Number: 2, Description: "Example description 3" }, { Number: 2, Description: "Example description 4" }];
console.log(groupBy(data, 'Number'));
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- typescript - 带有dayjs相对时间的打字稿警告
- javascript - 未捕获的类型错误:无法读取属性
- node.js - 使用 webpack 5 在电子上预加载脚本
- amazon-web-services - 为什么当我尝试终止 EC2 新实例时会创建它?
- amazon-web-services - 使用 PartiQL (DynamoDB) 在列表中选择某个地图元素
- python - 禁止登录 IRC 频道,以 twitch 为例
- django - 在 Heroku (Django) 上部署后如何恢复数据
- ruby-on-rails - Rails 6 Active Storage - 当您登陆带有图像的页面时,我的用户头像和帖子图像似乎在闪烁(因为它们正在加载两次)
- typescript - 在 TypeScript 中创建通用代理函数
- jquery - jQuery navbar 与 lightbox++ 冲突