# Porównaj dwie listy za pomocą DIFFARR: co dodać, zaktualizować i usunąć

> Użyj DIFFARR(), aby porównać elementy zapisane w bazie danych z elementami formularza i uzyskać te, które trzeba dodać, zaktualizować i usunąć.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: pl
Content-SHA256: 0f16aad3b4e051224df9ca3cd5b160a2ba2606c4572ebbe4d71e5d57e755bf04
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

`DIFFARR(property, saved, submitted)` porównuje dwie tablice obiektów według jednej właściwości i zwraca obiekt z trzema listami:

- `add`: obiekty z `submitted`, których właściwości **nie ma** w `saved`
- `upd`: dla obiektów, które są w obu, `{ db, form }` z obiektem zapisanym i przesłanym
- `rem`: **wartości właściwości** (nie obiekty) elementów z `saved`, których nie ma w `submitted`

To zwykły krok przy zapisywaniu edytowalnej listy: formularz wysyła całą listę, a Ty musisz wiedzieć, co zostało utworzone, co się zmieniło i co usunięto. Wartości są porównywane przez `==`, więc `1` i `'1'` to ten sam 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
	});
}
```
