# Comparer deux listes avec DIFFARR : quoi ajouter, mettre à jour et supprimer

> Utilisez DIFFARR() pour comparer les éléments enregistrés en base de données avec ceux d'un formulaire et obtenir ceux à ajouter, à mettre à jour et à supprimer.

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

`DIFFARR(property, saved, submitted)` compare deux tableaux d'objets selon une propriété et renvoie un objet avec trois listes :

- `add` : les objets de `submitted` dont la propriété n'est **pas** dans `saved`
- `upd` : pour les objets présents dans les deux, `{ db, form }` avec l'objet enregistré et l'objet soumis
- `rem` : les **valeurs de la propriété** (pas les objets) des éléments de `saved` qui ne sont pas dans `submitted`

C'est l'étape habituelle de l'enregistrement d'une liste modifiable : le formulaire envoie la liste entière et vous devez savoir ce qui a été créé, ce qui a changé et ce qui a été supprimé. Les valeurs sont comparées avec `==`, donc `1` et `'1'` sont le même élément.

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