ForgeTotal.js 5
nl

Total.js 5

Vergelijk twee lijsten met DIFFARR: wat toe te voegen, bij te werken en te verwijderen

Total.js 5 · total5@0.0.19 utilitiesarraysforms Uitgevoerd met Total.js 5

DIFFARR(property, saved, submitted) vergelijkt twee arrays van objecten op één eigenschap en geeft een object met drie lijsten terug:

  • add: de objecten van submitted waarvan de eigenschap niet in saved staat
  • upd: voor de objecten die in beide staan, { db, form } met het opgeslagen en het ingediende object
  • rem: de waarden van de eigenschap (niet de objecten) van de items van saved die niet in submitted staan

Het is de gebruikelijke stap bij het opslaan van een bewerkbare lijst: het formulier stuurt de hele lijst en jij moet weten wat is aangemaakt, wat is gewijzigd en wat is verwijderd. De waarden worden vergeleken met ==, dus 1 en '1' zijn hetzelfde item.

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