ForgeTotal.js 5
ro

Total.js 5

Compară două liste cu DIFFARR: ce se adaugă, se actualizează și se elimină

Total.js 5 · total5@0.0.19 utilitiesarraysforms Executată cu Total.js 5

DIFFARR(property, saved, submitted) compară două array-uri de obiecte după o proprietate și returnează un obiect cu trei liste:

  • add: obiectele din submitted a căror proprietate nu este în saved
  • upd: pentru obiectele care sunt în ambele, { db, form } cu obiectul salvat și cel trimis
  • rem: valorile proprietății (nu obiectele) elementelor din saved care nu sunt în submitted

Este pasul obișnuit la salvarea unei liste editabile: formularul trimite lista întreagă și trebuie să știi ce s-a creat, ce s-a schimbat și ce s-a șters. Valorile se compară cu ==, deci 1 și '1' sunt același 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
	});
}