# Compară două liste cu DIFFARR: ce se adaugă, se actualizează și se elimină

> Folosește DIFFARR() pentru a compara elementele salvate în baza de date cu cele ale unui formular și a obține cele de adăugat, de actualizat și de eliminat.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: ro
Content-SHA256: 7355e634be3af1e7dd3a220f3eee9a9eddb14156732170a6e8ed58272b773fdf
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

`DIFFARR(property, saved, submitted)` compară două array-uri de obiecte după o proprietate și returnează un obiect cu trei liste:

- `add`: obiectele din `submitted` a căror proprietate **nu** este în `saved`
- `upd`: pentru obiectele care sunt în ambele, `{ db, form }` cu obiectul salvat și cel trimis
- `rem`: **valorile proprietății** (nu obiectele) elementelor din `saved` care nu sunt în `submitted`

Este pasul obișnuit la salvarea unei liste editabile: formularul trimite lista întreagă și trebuie să știi ce s-a creat, ce s-a schimbat și ce s-a șters. Valorile se compară cu `==`, deci `1` și `'1'` sunt același element.

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