javascript - Grouping object entries into object arrays
问题描述
How can I create arrays to group members depending on their tag
?
Tags can be anything, these are just examples.
Example Input
[
{ tag: 'Red', member: 'Red-Steve' },
{ tag: 'Red', member: 'Red-Adam' },
{ tag: 'Blue', member: 'Blue-John' },
{ tag: 'Blue', member: 'Blue-James' },
{ tag: 'Blue', member: 'Blue-Igor' }
]
Example Output
{
Red: ['Red-Steve', 'Red-Adam']
Blue: ['Blue-John', 'Blue-James', 'Blue-Igor']
}
Edit: I just made a test case on jsperf
to compare the efficiency of the different answers and also the answer from the suggested duplicate question
https://jsperf.com/group-objects-reduce-vs-for-loop
The answer by @Majed Badawi was the most efficient
解决方案
You can use a simple set
to group them by tag
as follows:
let list = [
{ tag: 'Red', member: 'Red-Steve' },
{ tag: 'Red', member: 'Red-Adam' },
{ tag: 'Blue', member: 'Blue-John' },
{ tag: 'Blue', member: 'Blue-James' },
{ tag: 'Blue', member: 'Blue-Igor' }
];
let set = {};
for(let i = 0; i < list.length; i++){
let current = list[i];
if(!set[current.tag])
set[current.tag] = [current.member];
else
set[current.tag].push(current.member);
}
console.log(set);
推荐阅读
- android - 为什么这个 kotlin 分配可能(switchButton.isChecked = true)
- c - 编程C的执行结果并不顺利。为什么?
- python - 获取scipy的solve_ivp函数执行中间任务
- sql-server - 对于 sql server,我想选择所有已更改的记录
- python - Google App Engine 不为我在 app.yaml 中定义的入口点提供服务
- sql - 在 Postgresql 中将 UUlD 存储为 VARCHAR 而不进行任何格式化
- mobaxterm - 如何在 Mobaxterm 上使用自定义语法高亮
- amazon-web-services - Glue Boto 客户端——NoCredentialsError
- java - 如何在 android 上创建复制链接地址菜单?
- r - 使用 dplyr 查找列中的最大值并从不同列返回元素