ForgeTotal.js 5
pl

Total.js 5

Porównaj dwie listy za pomocą DIFFARR: co dodać, zaktualizować i usunąć

Total.js 5 · total5@0.0.19 utilitiesarraysforms Uruchomiono z Total.js 5

DIFFARR(property, saved, submitted) porównuje dwie tablice obiektów według jednej właściwości i zwraca obiekt z trzema listami:

  • add: obiekty z submitted, których właściwości nie ma w saved
  • upd: dla obiektów, które są w obu, { db, form } z obiektem zapisanym i przesłanym
  • rem: wartości właściwości (nie obiekty) elementów z saved, których nie ma w submitted

To zwykły krok przy zapisywaniu edytowalnej listy: formularz wysyła całą listę, a Ty musisz wiedzieć, co zostało utworzone, co się zmieniło i co usunięto. Wartości są porównywane przez ==, więc 1 i '1' to ten sam element.

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