# Συγκρίνετε δύο λίστες με το DIFFARR: τι να προστεθεί, να ενημερωθεί και να αφαιρεθεί

> Χρησιμοποιήστε το DIFFARR() για να συγκρίνετε τα στοιχεία που είναι αποθηκευμένα στη βάση δεδομένων με αυτά μιας φόρμας και να πάρετε όσα πρέπει να προστεθούν, να ενημερωθούν και να αφαιρεθούν.

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

Το `DIFFARR(property, saved, submitted)` συγκρίνει δύο πίνακες αντικειμένων με βάση μια ιδιότητα και επιστρέφει ένα αντικείμενο με τρεις λίστες:

- `add`: τα αντικείμενα του `submitted` των οποίων η ιδιότητα **δεν** υπάρχει στο `saved`
- `upd`: για τα αντικείμενα που υπάρχουν και στα δύο, `{ db, form }` με το αποθηκευμένο και το υποβληθέν αντικείμενο
- `rem`: οι **τιμές της ιδιότητας** (όχι τα αντικείμενα) των στοιχείων του `saved` που δεν υπάρχουν στο `submitted`

Είναι το συνηθισμένο βήμα όταν αποθηκεύετε μια επεξεργάσιμη λίστα: η φόρμα στέλνει ολόκληρη τη λίστα και πρέπει να ξέρετε τι δημιουργήθηκε, τι άλλαξε και τι διαγράφηκε. Οι τιμές συγκρίνονται με `==`, άρα το `1` και το `'1'` είναι το ίδιο στοιχείο.

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