Unveränderlich JS vergleichen, verschachtelte Strukturen
Ich habe 2 geschachtelte Strukturen newState und newState1.
Aber wenn ich vergleichen die equals() oder Unveränderlich.ist() zurückgegeben false. Die Werte in diesen Strukturen identisch.
Wie man richtig vergleichen newState und newState1?
var grid = {
editable: false,
widgets: [{
name: 'Some widget',
type: 'List',
defaultDataSource: 'daily',
dataSources: {}
}, {
name: 'Some widget1',
type: 'List',
defaultDataSource: 'daily',
dataSources: {}
}]
};
var state = Immutable.fromJS(grid);
var newState = state.updateIn(['widgets'], function (list) {
return list.push(Immutable.Map({
name: 'Some widget2',
type: 'List',
defaultDataSource: 'daily',
dataSources: {}
}));
});
var newState1 = state.updateIn(['widgets'], function (list) {
return list.push(Immutable.Map({
name: 'Some widget2',
type: 'List',
defaultDataSource: 'daily',
dataSources: {}
}));
});
console.log(state.toJS(), newState.toJS(), newState1.toJS());
console.log(newState.equals(newState1)); //false
Code in JSFiddle:
https://jsfiddle.net/z3xuagwm/
dataSources
ist ein javascript-Objekt, und nicht in Unveränderlich lieben. ändern-es-zu-string-ver.. Oder wenn Sie update mit Landkarte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint es, dass immutablejs nicht tiefen-Konvertierung, so dass, wenn Ihr Wert Objekt bleibt Objekt.
Da Sie erstellen verschiedene Objekt in jedem Schritt aktualisieren, und die Objekte behandeln Sie anders, wenn Sie vergleichen Sie miteinander, so sollten Sie auch konvertieren Unveränderlich.Map-Objekt, um die Vergleiche wahr sein.
JS:
HTML:
Ändern Unveränderlich.Karte Unveränderlich.fromJS in den push-Funktionen (wie schon gesagt wurde - nur fromJS werden eine Tiefe Wandlung, Karte,Liste etc. nicht):
.fromJS
? Aber es ist die einzige anständige Ansatz zum Vergleich von verschachtelten Datenstrukturen?Was über die Verwendung von
JSON.stringify
?Wenn Sie wissen, dass Sie nicht kreisförmige Objekte, und enthalten keine Funktionen, ich denke es ist der Schnellste Weg, Sie zu vergleichen.
json-is-equal
, dass für Sie arbeiten kann, github.com/Kikobeats/json-is-equal