2015-11-20 13 views
6

Diese Frage bezieht sich auf die Bibliothek Immutable.js.ImmutableJS: Liste in indizierte Karte umwandeln

Ich habe eine List<T>, wo T{name: string, id: number} ist. Ich möchte es in Map<number, T>, mit id von T zu den Schlüsseln konvertieren. Die Verwendung der Standardmethode toMap gibt mir eine Map mit sequentiellen Indizes, und es gibt keine Möglichkeit, dort zu haken. Und keine Methode wie indexBy oder andere. wie geht das?

Antwort

11

Sie können es mit einem Druckminderer wie folgt tun:

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" } 
}; 
+1

danken Ihnen für dieses Beispiel war ich für ein paar Tage mit diesem Problem zu kämpfen –