如何正确使用lodash将数组内的对象分组?

时间:2020-07-01 06:44:40

标签: javascript arrays typescript object lodash

我有一个这样的对象数组:

[ { key: 'particles', value: 'GN' },
  { key: 'particles', value: 'TR' },
  { key: 'wave', value: 'AB' },
  { key: 'sense', value: 'TU' } ]

我需要做些类似的事情

[ { system.particles: ['GN', 'TR'] }, system.wave: {'AB'}, system.sense: {'TE'} } ]

我尝试使用lodash,正如我从使用groupBy函数的示例中看到的那样。但是我没有得到想要的东西,其中包括更改键名。

这是我的代码的一部分:

let exo = _.mapValues(_.groupBy(desc, 'key'),
    clist => clist.map(tags => _.omit(desc, ['key'])))

但是我只能得到这个,这不是我想要的

{ particles: [ { value: 'GN' }, { value: 'TR' } ],
  wave: [ { value: 'AB' } ],
  sense: [ { value: 'TU' } ] }

1 个答案:

答案 0 :(得分:1)

您可以这样映射

const data = [
  { key: 'particles', value: 'GN' },
  { key: 'particles', value: 'TR' },
  { key: 'wave', value: 'AB' },
  { key: 'wave', value: 'ABC' },
  { key: 'wave', value: 'ABD' },
  { key: 'sense', value: 'TU' }
];

const groupedData = _.map(_.groupBy(data, 'key'), (value, key) => {
   const newKey = 'system.' + key;

   return {[newKey]: _.map(value, 'value') };
});

console.log(groupedData);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>

相关问题