# Jämför två listor med DIFFARR: vad som ska läggas till, uppdateras och tas bort

> Använd DIFFARR() för att jämföra posterna som sparats i databasen med posterna i ett formulär och få fram de som ska läggas till, uppdateras och tas bort.

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

`DIFFARR(property, saved, submitted)` jämför två arrayer av objekt efter en egenskap och returnerar ett objekt med tre listor:

- `add`: objekten i `submitted` vars egenskap **inte** finns i `saved`
- `upd`: för objekten som finns i båda, `{ db, form }` med det sparade och det inskickade objektet
- `rem`: **värdena för egenskapen** (inte objekten) för posterna i `saved` som inte finns i `submitted`

Det är det vanliga steget när man sparar en redigerbar lista: formuläret skickar hela listan och du behöver veta vad som skapats, vad som ändrats och vad som tagits bort. Värdena jämförs med `==`, så `1` och `'1'` är samma post.

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