Ho due array, vecchi e nuovi, che contengono oggetti in ogni posizione. Come faccio a sincronizzare o trovare il delta (vale a dire ciò che è nuovo, aggiornato e cancellata dal nuovo array rispetto alla vecchia serie)JavaScript sincronizza due array (di oggetti)/trova delta
var o = [
{id:1, title:"title 1", type:"foo"},
{id:2, title:"title 2", type:"foo"},
{id:3, title:"title 3", type:"foo"}
];
var n = [
{id:1, title:"title 1", type:"foo"},
{id:2, title:"title updated", type:"foo"},
{id:4, title:"title 4", type:"foo"}
];
Con i dati di cui sopra, utilizzando id come chiave, avremmo trovato che l'elemento con ID = 2 ha un titolo aggiornato, l'elemento con ID = 3 viene eliminato e l'elemento con ID = 4 è nuovo.
C'è una libreria esistente là fuori che ha funzioni utili, o è un caso di loop e inner loop, confrontare ogni riga ... ad esempio.
for(var i=0, l=o.length; i<l; i++)
{
for(var x=0, ln=n.length; x<ln; x++)
{
//compare when o[i].id == n[x].id
}
}
Fare questo tipo di confronto tre volte, per trovare nuovi, aggiornati e cancellati?
Si potrebbe accelerare le cose un po ', se gli ID sono unici e si utilizza un oggetto con l'id come chiavi. – Sirko
Dovresti spiegare qual è l'output? Un oggetto con tre proprietà? '{added: 4], modificato: [2], cancellato: [3]}' –
L'output sarebbe probabilmente il migliore in tre matrici. L'eliminato avrebbe bisogno solo di ID, aggiunti e modificati avrebbe bisogno della piena "riga"/oggetto – Fergal