2016-05-19 7 views
0

Ich konvertiere einen Warenkorb in eine unveränderliche Struktur.ImmutableJs - Objekte vergleichen, aber für eine Eigenschaft

Gibt es einen einfachen Weg mit immutablejs zu sehen, ob ein unveränderliches Objekt bereits in einer unveränderlichen Liste existiert, außer für eine Objekteigenschaft 'Quantität', die unterschiedlich sein könnte? Listenbeispiel:

[{ 
    id: 1, 
    name: 'fish and chips', 
    modifiers: [ 
    { 
     id: 'mod1', 
     name: 'Extra chips' 
    } 
    ], 
    quantity: 2 
},{ 
    id: 2, 
    name: 'burger and chips', 
    modifiers: [ 
    { 
     id: 'mod1', 
     name: 'No salad' 
    } 
    ], 
    quantity: 1 
}] 

Jetzt sagen, dass ich ein anderes Objekt in der Liste hatte. Aber ich möchte überprüfen, ob dieser genaue Punkt mit Modifikatoren bereits in der Liste vorhanden ist? Ich könnte einfach list.findIndex(item => item === newItem) tun, aber wegen der möglichen anderen Quantitäteigenschaft dann funktioniert es nicht. Gibt es eine Möglichkeit, bis auf eine Eigenschaft zu überprüfen? Oder irgendeinen Weg, dies zu tun, ohne jede Eigenschaft (abgesehen von der Quantität) durchlaufen zu müssen, um zu sehen, ob sie gleich sind?

Derzeit habe ich eine schrecklich verschachtelte Schleife, um jedes Element zu durchlaufen und überprüfen Sie jede Eigenschaft, um zu sehen, ob es gleich ist.

+0

Bitte formulieren Sie Ihre Frage mit Ihrem Modell und was genau wollen Sie suchen. – hazardous

+0

@HazardouS ah ja natürlich, aktualisiert –

Antwort

1

Nun sollte diese

list.findIndex(item => item.delete("quantity").equals(newItem.delete("quantity"))

Die equals Methode macht tiefe Wertvergleich Work-. Wenn Sie also die Menge löschen, vergleichen Sie alle wichtigen Werte.

PS: bitte ignorieren Code Formatierung, ich bin auf SO App.

PPS: Der obige Code ist nicht optimal, Sie sollten ein vorgestutztes newItem in der Pfeilfunktion vergleichen, anstatt es dort zu trimmen.

+0

Entfernen Sie auch die ID, die eindeutig aussieht. – hazardous

+0

nette Idee, das sieht aus wie es funktionieren würde, danke –

+1

funktioniert gut, Prost Mate, 20 Zeilen Code gegangen. –

Verwandte Themen