# Zwei Listen mit DIFFARR vergleichen: was hinzuzufügen, zu aktualisieren und zu entfernen ist

> Mit DIFFARR() vergleichst du die in der Datenbank gespeicherten Einträge mit denen eines Formulars und erhältst die, die hinzugefügt, aktualisiert und entfernt werden müssen.

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

`DIFFARR(property, saved, submitted)` vergleicht zwei Arrays von Objekten anhand einer Eigenschaft und gibt ein Objekt mit drei Listen zurück:

- `add`: die Objekte aus `submitted`, deren Eigenschaft **nicht** in `saved` vorkommt
- `upd`: für die Objekte, die in beiden vorkommen, `{ db, form }` mit dem gespeicherten und dem gesendeten Objekt
- `rem`: die **Werte der Eigenschaft** (nicht die Objekte) der Einträge aus `saved`, die nicht in `submitted` sind

Das ist der übliche Schritt beim Speichern einer bearbeitbaren Liste: Das Formular sendet die ganze Liste, und du musst wissen, was neu angelegt, was geändert und was gelöscht wurde. Die Werte werden mit `==` verglichen, daher sind `1` und `'1'` derselbe Eintrag.

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