【问题标题】:How to correctly use the lodash to group an object inside an array?如何正确使用 lodash 对数组中的对象进行分组?
【发布时间】:2020-10-21 13:28:56
【问题描述】:

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

[ { 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' } ] }

【问题讨论】:

  • 这部分{'GN', 'TR'} 无效。你需要一个数组。
  • 用 desc.value 代替 _.omit(...) 怎么样?
  • @Vortex 检查我的答案是你想要的吗?
  • 这是什么system.particles
  • @NinaScholz 你是对的,对不起。固定编辑

标签: javascript arrays typescript object lodash


【解决方案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>

【讨论】:

  • 感谢您的回答,这正是我正在寻找的。有什么办法可以更改键名吗?它们是从变量定义的名称。我的意思是例如'粒子'到'system.particles'
  • 它们是从变量定义的名称是什么意思?
  • 类似于 system.${data.key} 但这种格式在返回中无效
  • 非常感谢您的帮助,这完全是我所需要的!谢谢
猜你喜欢
  • 2021-05-04
  • 1970-01-01
  • 2019-06-28
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 2018-08-28
  • 2022-01-12
相关资源
最近更新 更多