如何按键分组对象数组?

时间:2019-01-14 08:06:03

标签: javascript logic lodash

有人知道(如果可能的话,也可以使用普通js)通过对象键对对象数组进行分组然后根据分组创建新的对象数组的方法吗?例如,我有一系列汽车对象:

SELECT * FROM Table1 t1 
LEFT JOIN Table2 t2
ON t1.user='bob' AND t1.id = t2.id;

我想创建一个按颜色分组的新对象数组。

const array = [
  {red: [ {height: 50} ]},
  {green: [ {height: 20} ]},
  {blue: [ {height: 30} ]},
  {blue: [ {height: 40} ]},
  {red: [ {height: 10} ]},
  {green: [ {height: 60} ]}
]

我尝试使用lodash.groupBy,但是我根本不知道如何解决这个问题。

2 个答案:

答案 0 :(得分:2)

使用数组reduce可以迭代数据并计算结果对象。

ViewController

答案 1 :(得分:1)

您可以使用lodash的_.mergeWith()将具有相同键的对象组合在一起,然后使用_.map()将其转换回数组:

const array = [{"red":[{"height":50}]},{"green":[{"height":20}]},{"blue":[{"height":30}]},{"blue":[{"height":40}]},{"red":[{"height":10}]},{"green":[{"height":60}]}]

const fn = _.flow([
  arr => _.mergeWith({}, ...arr, (o, s) => _.isArray(o) ? o.concat(s) : s),
  objs => _.map(objs, (v, k) => ({ [k]: v }))
])

const result = fn(array)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>