首页 > 解决方案 > 将对象数组转换为具有分组键作为数组的对象的简单方法

问题描述

我正在寻找一种简单的方法来执行以下操作。我尝试过这样做lodash.reduce,但它很笨重,有没有更简单的方法。

从:

[{a: 'meow'}, {a: 'woof'}]

至:

{a: ['meow', 'woof']}

标签: javascripttypescriptlodash

解决方案


您可以使用lodash#assignWith将所有属性各自的值分配到一个对象中,并使用自定义函数来确定您希望如何构造对象。

const result = _.assignWith({}, ...data, (v = [], s) => v.concat(s));

注意:为了确保我们不会改变data数组中的任何对象,我传递了一个空对象作为第一个参数来充当目标对象。

const data = [
  { a: 'meow' },
  { a: 'woof', k: 'hey' },
  { k: 'yo', d: 'hehe' },
  { d: 'wazup', q: 'ohoho' }
];

const result = _.assignWith({}, ...data, (v = [], s) => v.concat(s));

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


推荐阅读