# Сравнете два списъка с DIFFARR: какво да се добави, обнови и премахне

> Използвайте DIFFARR(), за да сравните елементите, запазени в базата данни, с тези на формуляр и да получите тези, които трябва да се добавят, обновят и премахнат.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: bg
Content-SHA256: 25dbd2bb0512a42c02d6f51a8fe578c6500f0100b7d13a382127f50aa252ecdf
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
	});
}
```
