2016-08-02 5 views
0

Ich überlege, wie man Immutable.js am besten nutzt. Ich sah einige Code wie folgt aus:Soll ich delete und findIndex oder filter zum Entfernen und Element aus einer immutable.js-Liste verwenden?

state.update('something', something => 
something.delete(
    something.findIndex(x => x.id === 1) 
) 
) 

Und es scheint mir, wie dieser Code viel sauberer mit Filter geschrieben werden könnte:

state.update('something', something => 
something.filter(x => x.id !== 1) 
) 

Es könnte sogar sein Punkt frei:

propEq = k => v => x => x[k] === v 
state.update('something', propEq('x', 1)) 

Gibt es hier signifikante Leistungseinbußen?

Wenn delete + findIndex nachweislich leistungsfähiger ist, gibt es eine saubere, point-free Art, diesen Code zu schreiben?

Antwort

0

Ich mag Ihren Filteransatz. Ich könnte das Prädikat zwicken filterNot() zu verwenden, obwohl das ist nur persönliche Geschmack mehr als alles andere:

state.update('something', something => 
    something.filterNot(x => x.id === 1) 
) 

Die einzige perf Sorge ist, dass Filtermittel Sie haben über die gesamte Liste zu durchlaufen, egal was passiert. Bei kleineren Listen ist dies keine große Sache, aber bei größeren Listen ist die Verschlechterung der Leistung möglicherweise bemerkbar.

Zum Beispiel, in einer Liste von 10.000 Artikeln, findIndex() wird wahrscheinlich nicht 10.000 Mal iterieren, während filter() wird immer 10.000 Mal iterieren.

So würde ich mit dem Cleaner-Code bleiben, um findIndex() und delete(), wenn filter() nicht mit Ihren Anwendungsdaten skalieren.

1

Wie Adam sagte, findIndex wird wahrscheinlich nicht über die gesamte Liste iterieren, aber meine Empfehlung wäre, Map anstelle von Liste mit id als Schlüssel zu verwenden. Dann haben Sie Zeit Komplexität von O (1) und Löschen von Einträgen ist viel sauberer und lesbarer als gut.

Verwandte Themen