# Porovnajte dva zoznamy pomocou DIFFARR: čo pridať, aktualizovať a odstrániť

> Použite DIFFARR() na porovnanie položiek uložených v databáze s položkami formulára a získajte tie, ktoré treba pridať, aktualizovať a odstrániť.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: sk
Content-SHA256: 56ca4805bb1d8f0d4e8cdfbf721bbd0f0ee06cf1d48d85c978765b1139b1358d
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

`DIFFARR(property, saved, submitted)` porovná dve polia objektov podľa jednej vlastnosti a vráti objekt s tromi zoznamami:

- `add`: objekty z `submitted`, ktorých vlastnosť **nie je** v `saved`
- `upd`: pre objekty, ktoré sú v oboch, `{ db, form }` s uloženým a odoslaným objektom
- `rem`: **hodnoty vlastnosti** (nie objekty) položiek z `saved`, ktoré nie sú v `submitted`

Je to obvyklý krok pri ukladaní upraviteľného zoznamu: formulár pošle celý zoznam a vy potrebujete vedieť, čo sa vytvorilo, čo sa zmenilo a čo sa zmazalo. Hodnoty sa porovnávajú pomocou `==`, takže `1` a `'1'` sú tá istá položka.

```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
	});
}
```
