У меня есть массив объектов. Упрощенная версия (с несколькими свойствами):
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 }
}
}
В некоторой степени похож на другие вопросы , но не совсем.
Что у меня есть до сих пор: использование приведения к группе на 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
внутри команд.