JavaScript ES6 : array of objects to array grouped by key and indexed by property

标签 javascript arrays object

我有一个对象数组。简化版本(只有几个属性):

let d = [
{ team:"sales", key:"employees", value:24 },
{ team:"sales", key:"floor", value:2 },
{ team:"finance", key:"employees", value:7 },
{ team:"finance", key:"floor", value:2 },
]

想要按 team 分组,然后按 key,使用纯 (ES6) JavaScript:

{
  sales: {
    employees: { team:"sales", key:"employees", value:24 },
    floor: { team:"sales", key:"floor", value:2 }
  },
  finance: {
    employees: { team:"finance", key:"employees", value:7 },
    floor: { team:"finance", key:"floor", value:2 }
  }
}

有点类似于other questions ,但不完全是。

到目前为止我所拥有的:使用 reduce 按 team 分组:

let groupBy = (data, field) => data.reduce((acc, obj) => Object.assign(acc, { [obj[field]]:( acc[obj[field]] || [] ).concat(obj) }), {})

let result = groupBy(d,'team')

这给出:

{
sales: [
  { team:"sales", key:"employees", value:24 },
  { team:"sales", key:"floor", value:2 }
],
finance: [
  { team:"finance", key:"employees", value:7 },
  { team:"finance", key:"floor", value:2 }
]
}

不确定按团队内的key 级别分组的推荐方法是什么。

最佳答案

不是通过将每个对象连接到一个新数组来累积到一个数组,您可以累积到一个新的对象文字。您可以通过将累积的对象散布到一个新的对象字面量中来做到这一点。然后,您可以再次为当前对象团队传播累积对象的结果,或者如果不存在默认对象 (|| {})。最后,您可以在 obj.key 的嵌套对象文字上设置一个新键,并将其值设置为当前迭代对象本身。

const data = [
  { team:"sales", key:"employees", value:24 },
  { team:"sales", key:"floor", value:2 },
  { team:"finance", key:"employees", value:7 },
  { team:"finance", key:"floor", value:2 },
];

const groupBy = (array, field) => array.reduce((acc, obj) =>
  ({...acc, [obj[field]]: {...(acc[obj[field]] || {}), [obj.key]: obj}}), {});

console.log(groupBy(data,'team'));

关于JavaScript ES6 : array of objects to array grouped by key and indexed by property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60970646/

相关文章:

list - 如何创建输出列表(不是表格)的对象

javascript - 如何获取某种特定格式的时间?

javascript - 在 ng-click 中使用 "this"

javascript - 使用 "using strict"作为 "use strong"的备份

javascript - javascript "break"会完全停止递归函数还是只是停止该实例?

java - 函数删除数组类中的所有内容

java - 计算和写入重复项

python - 在python中将类对象读/写到dat文件

javascript - 对象的目标父数组

javascript - .before 插入多个元素