ImmutableJS:将列表转换为索引地图
ImmutableJS: Convert List to indexed Map
这个问题是关于 Immutable.js 图书馆的。
我有一个 List<T>
,其中 T
是 {name: string, id: number}
。我想将其转换为 Map<number, T>
,将 T
的 id
转换为键。使用标准方法 toMap
给我一个带有顺序索引的 Map
,并且无法挂钩那里。并且没有像 indexBy
或其他方法。怎么做?
你可以用这样的减速器来做:
function indexBy(iterable, searchKey) {
return iterable.reduce(
(lookup, item) => lookup.set(item.get(searchKey), item),
Immutable.Map()
);
}
var things = Immutable.fromJS([
{id: 'id-1', lol: 'abc'},
{id: 'id-2', lol: 'def'},
{id: 'id-3', lol: 'jkl'}
]);
var thingsLookup = indexBy(things, 'id');
thingsLookup.toJS() === {
"id-1": { "id": "id-1", "lol": "abc" },
"id-2": { "id": "id-2", "lol": "def" },
"id-3": { "id": "id-3", "lol": "jkl" }
};
这个问题是关于 Immutable.js 图书馆的。
我有一个 List<T>
,其中 T
是 {name: string, id: number}
。我想将其转换为 Map<number, T>
,将 T
的 id
转换为键。使用标准方法 toMap
给我一个带有顺序索引的 Map
,并且无法挂钩那里。并且没有像 indexBy
或其他方法。怎么做?
你可以用这样的减速器来做:
function indexBy(iterable, searchKey) {
return iterable.reduce(
(lookup, item) => lookup.set(item.get(searchKey), item),
Immutable.Map()
);
}
var things = Immutable.fromJS([
{id: 'id-1', lol: 'abc'},
{id: 'id-2', lol: 'def'},
{id: 'id-3', lol: 'jkl'}
]);
var thingsLookup = indexBy(things, 'id');
thingsLookup.toJS() === {
"id-1": { "id": "id-1", "lol": "abc" },
"id-2": { "id": "id-2", "lol": "def" },
"id-3": { "id": "id-3", "lol": "jkl" }
};