ForgeTotal.js 5
sv

Total.js 5

Jämför två listor med DIFFARR: vad som ska läggas till, uppdateras och tas bort

Total.js 5 · total5@0.0.19 utilitiesarraysforms Körd med Total.js 5

DIFFARR(property, saved, submitted) jämför två arrayer av objekt efter en egenskap och returnerar ett objekt med tre listor:

  • add: objekten i submitted vars egenskap inte finns i saved
  • upd: för objekten som finns i båda, { db, form } med det sparade och det inskickade objektet
  • rem: värdena för egenskapen (inte objekten) för posterna i saved som inte finns i submitted

Det är det vanliga steget när man sparar en redigerbar lista: formuläret skickar hela listan och du behöver veta vad som skapats, vad som ändrats och vad som tagits bort. Värdena jämförs med ==, så 1 och '1' är samma post.

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