# Vergelijk twee lijsten met DIFFARR: wat toe te voegen, bij te werken en te verwijderen

> Gebruik DIFFARR() om de in de database opgeslagen items te vergelijken met die van een formulier en krijg de items die moeten worden toegevoegd, bijgewerkt en verwijderd.

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

`DIFFARR(property, saved, submitted)` vergelijkt twee arrays van objecten op één eigenschap en geeft een object met drie lijsten terug:

- `add`: de objecten van `submitted` waarvan de eigenschap **niet** in `saved` staat
- `upd`: voor de objecten die in beide staan, `{ db, form }` met het opgeslagen en het ingediende object
- `rem`: de **waarden van de eigenschap** (niet de objecten) van de items van `saved` die niet in `submitted` staan

Het is de gebruikelijke stap bij het opslaan van een bewerkbare lijst: het formulier stuurt de hele lijst en jij moet weten wat is aangemaakt, wat is gewijzigd en wat is verwijderd. De waarden worden vergeleken met `==`, dus `1` en `'1'` zijn hetzelfde item.

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