# Confronta due liste con DIFFARR: cosa aggiungere, aggiornare e rimuovere

> Usa DIFFARR() per confrontare gli elementi salvati nel database con quelli di un modulo e ottenere quelli da aggiungere, aggiornare e rimuovere.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: it
Content-SHA256: 95693befcb2f47122c7661e706d14e92e888b68866459149c4fec6b16cc9823f
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

`DIFFARR(property, saved, submitted)` confronta due array di oggetti tramite una proprietà e restituisce un oggetto con tre liste:

- `add`: gli oggetti di `submitted` la cui proprietà **non** è in `saved`
- `upd`: per gli oggetti presenti in entrambi, `{ db, form }` con l'oggetto salvato e quello inviato
- `rem`: i **valori della proprietà** (non gli oggetti) degli elementi di `saved` che non sono in `submitted`

È il passaggio usuale quando si salva una lista modificabile: il modulo invia l'intera lista e devi sapere cosa è stato creato, cosa è cambiato e cosa è stato eliminato. I valori vengono confrontati con `==`, quindi `1` e `'1'` sono lo stesso elemento.

```js controllers/lists.js
const saved = [
	{ id: 1, name: 'Book' },
	{ id: 2, name: 'Pen' },
	{ id: 3, name: 'Lamp' }
];

exports.install = function() {
	ROUTE('POST /sync/', sync);
};

function sync($) {
	const diff = DIFFARR('id', saved, $.body.items);
	$.json({
		add: diff.add,
		update: diff.upd.map(n => ({ id: n.db.id, from: n.db.name, to: n.form.name })),
		remove: diff.rem
	});
}
```
