javascript - ES6 按字段类型分组数组对象

标签 javascript collections ecmascript-6

是否有一种简洁的 es6 功能方法可以按类型对项目进行分组,因为它是不可变的?

account.json

   [
         {"account": {"name": "Bob's credit", "type": "credit", "id": "1"}},
         {"account": {"name": "savings", "type": "savings", "id": "2"}},
         {"account": {"name": "vacation savings", "type": "savings", "id": "3"}},
         {"account": {"name": "son's savings", "type": "savings", "id": "4"},
         {"account": {"name": "wife's credit card", "type": "savings", "id": "5"}
   ]

预计
[
{"savings": [
    {"account": {"name": "savings", "type": "savings", "id": "2"}},
    {"account": {"name": "vacation savings", "type": "savings", "id": "3"}},
    {"account": {"name": "son's savings", "type": "savings", "id": "4"}
]},

{"checking": [
   {"account": {"name": "wife's credit card", "type": "savings", "id": "5"}
]

最佳答案

您可以使用 Array#reduce 按内部元素对列表进行分组 type属性(property) :

const data = [
     {"account": {"name": "Bob's credit", "type": "credit", "id": "1"}},
     {"account": {"name": "savings", "type": "savings", "id": "2"}},
     {"account": {"name": "vacation savings", "type": "savings", "id": "3"}},
     {"account": {"name": "son's savings", "type": "savings", "id": "4"}},
     {"account": {"name": "wife's credit card", "type": "savings", "id": "5"}}
];

const res = data.reduce((acc, curr) => {
  if(!acc[curr.account.type]) acc[curr.account.type] = []; //If this type wasn't previously stored
  acc[curr.account.type].push(curr);
  return acc;
},{});

console.log(res);

关于javascript - ES6 按字段类型分组数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49575398/

相关文章:

Grails域类 transient 集合属性 setter 问题

javascript - ES6 导入 – jQuery 未定义

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

javascript - RxJS 异步请求更新

javascript - Sencha 动态添加到组件在构建中不起作用

javascript - 使用 Angular 13 使用 js-xlsx 读取本地 Excel 文件?

java - 如何使用来自哈希集的参数调用方法?

java - 为什么我的多线程任务无法正常工作?

javascript - Promises.all 的快速失败行为

javascript - Dojo dijit.layout.TabContainer - 如何将类添加到选项卡?