Ho un oggetto selectedItem
in Angolare, contiene altri oggetti e matrici. Creo una copia profonda utilizzando un trucco JSON:Come attraversare l'oggetto JS e tutti gli array e gli oggetti all'interno per confrontarlo con la sua copia?
$scope.editableItem = JSON.parse(JSON.stringify($scope.selectedItem))
allora io uso editableItem
modello input, modificare alcuni valori all'interno. selectedItem
non cambia. Quindi voglio inviare tramite PATCH
tutte le modifiche apportate, ma non i campi che non sono stati modificati. Quindi ho bisogno di togliere lo editableItem
da tutti i campi uguali nello selectedItem
invariato.
Come farlo in modo efficiente? Stavo pensando di attraversare l'oggetto ricorsivamente usando Underscore, ma mi piacerebbe davvero sapere se è un buon modo di pensare prima di affrontarlo.
In alternativa, potrei probabilmente creare un terzo oggetto che contenga solo campi toccati dal secondo, aggiunti dinamicamente, ma non sono sicuro di come affrontarlo.
MODIFICATO: Per essere chiari, mi aspetto che la risposta sia generica e presupponga la struttura di oggetti più complicata possibile. Ad esempio, nessuna risposta da this question è applicabile in quanto entrambi presuppongono che l'oggetto abbia solo campi semplici o che debbano avere un osservatore angolare impostato esplicitamente per ogni campo separatamente.
Come si desidera esprimere le differenze negli array? Come array sparsi (che non puoi convertire correttamente in JSON)? – CherryDT
Buon punto. Immagino: se non c'è differenza, allora non mandare affatto l'array. Se c'è una differenza, invia l'intero array modificato. Quindi l'array nel suo insieme è un valore che può essere cambiato e passato o invariato e non passato. – Senthe