我有一个这样的对象数组:
[ { 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' } ] }
答案 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>