繁体   English   中英

Ramda:按嵌套分组 object

[英]Ramda: group by nested object

我有这个数据:

const entities = [
  { id: 'view_1', group: { id: 'g_1', name: 'Group 1' } },
  { id: 'view_2', group: { id: 'g_2', name: 'Group 2' } },
  { id: 'view_3', group: { id: 'g_2', name: 'Group 2' } },
];

我需要将其设为 output:

const groupedEntities = [
  { id: 'g_1', name: 'Group 1', views: [{ id: 'view_1' }] },
  { id: 'g_2', name: 'Group 2', views: [{ id: 'view_3' }, { id: 'view_3' }] },
];

我知道indexBy ,但它不保留键以外的其他数据。 我需要的是保留所有数据并返回一个 object。

Ramda 的groupBy可以在这里帮助你:

 const transform = pipe ( groupBy (path (['group', 'id'])), values, map (applySpec ({ group: path ([0, 'group', 'id']), name: path ([0, 'group', 'name']), views: pluck ('id') })) ) const entities = [{id: 'view_1', group: { id: 'g_1', name: 'Group 1'}}, {id: 'view_2', group: { id: 'g_2', name: 'Group 2'}}, {id: 'view_3', group: { id: 'g_2', name: 'Group 2'}}] console.log (transform (entities))
 .as-console-wrapper {max-height: 100%;important: top: 0}
 <script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.28.0/ramda.min.js"></script> <script>const {pipe, groupBy, path, values, map, applySpec, pluck} = R</script>

它的 rest 有点多,因为需要从每个组中的第一个元素和整个组中提取部分,但总的来说,它还不错:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM