2016-03-19 27 views
1

Spielen mit ImmutableJS, Dokumentation benötigt Arbeit und aktuelle Arbeitsbeispiele.Zugriff auf ImmutableJS OrderedSet()

const a = [["a"],["b"],["c"]] 
const b = Immutable.List(a) 
const c = Immutable.OrderedSet(a) 

b.first() // => "a" 
b.get(1) // => "b" 
c.first() // => ["a"] 
c.get(1) // => undefined !uh oh! 
c.toList().get(1) // => "b" !indirect! 

Frage: Wie kann ich ohne sie über die gesamte Liste in eine .List oder Schleife Umwandlung aus dem zweiten Element von .OrderedSet c drucken?

+1

Traurige Geschichte: '{set, orderedSet} .get' akzeptiert einen Wert als Argument und gibt den Wert zurück. https://github.com/facebook/immutable-js/issues/754 – danielepolencic

+0

@danielepolencic: Vereinbart, dass get (0) über .Set konsistent sein sollte. Fehlerbericht: https://github.com/facebook/immutable-js/issues/810 –

Antwort

2

Sie können es tun, wie zum Beispiel:

// using some ES6 features 
let ordSet = immutable.OrderedSet([1, 2, 3]) 
let iterator = ordSet[Symbol.iterator] // get iterator to the collection 
iterator.next() // 1 
iterator.next() // 2 
iterator.next() // 3 

Dieser sagte, lassen Sie mich anmerken, dass, selbst wenn dies nicht der netteste Syntax, von dem Punkt der Leistung, es ist das beste, wie es erhält: OrderedSet tut keinen zufälligen Zugriff auf seine Elemente, jedes Element erinnert sich einfach an seinen Nachfolger und Vorgänger. Daher erfordert n -th Element n Hops, ob immutable.js bietet einige Phantasie Helfer dafür oder nicht. AFAIK, solche Linked-List-ähnliche Implementierung von OrderedSet ist unvermeidlich, wenn add/delete sollte schnell bleiben.

+0

Dies führt uns zu dem uralten Problem auf [verknüpfte Liste vs Array] (http://stackoverflow.com/questions/393556/when - Verwenden Sie eine verknüpfte Liste über eine Array-Array-Liste vs HashSet vs TreeMap vs HashMap vs [Ihre Favoritenliste einfügen], jede mit einem eigenen Benchmark für 'add' /' delete' –

Verwandte Themen