【发布时间】:2018-11-29 00:08:20
【问题描述】:
使用 Immutable 的 List 和 Map 集合考虑以下 example:
const Map = Immutable.Map;
const List = Immutable.List;
const origin = List([Map({name: 'element1', groupKey: Map({id1: 'foo', id2: 'bar'})}), Map({name: 'element2', groupKey: Map({id3: 'foo'})})]);
console.log("Origin:", String(origin));
const grouped = origin.groupBy( el => el.get('groupKey'));
console.log("Grouped:", String(grouped));
console.log("Expected", "OrderedMap { 'id1': List [ Map { 'name': 'element1', 'groupKey': Map { 'id1': 'foo', 'id2': 'bar' } } ], 'id2': List [ Map { 'name': 'element1', 'groupKey': Map { 'id1': 'foo', 'id2': 'bar' } } ], 'id3': List [ Map { 'name': 'element2', 'groupKey': Map { 'id3': 'foo' } } ] }");
基本上,我正在寻找的是一种将 origin 中包含的地图按 groupKey 分组的方法,其中每个 id(id1、id2、id3)指向下图:
{
id1: [{'name': 'element1', ...}],
id2: [{'name': 'element1', ...}],
id3: [{'name': 'element2', ...}],
}
我无法弄清楚如何拆分从groupBy(在本例中为映射)返回的结果键。我尝试使用 API 提供的mapping functions,但似乎无法根据需要使用它们来更改基数。
实现这一目标的最干净的方法是什么?
【问题讨论】: