ForgeTotal.js 5
bg

Total.js 5

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

Total.js 5 · total5@0.0.19 utilitiesarraysforms Изпълнено с Total.js 5

DIFFARR(property, saved, submitted) сравнява два масива от обекти по едно свойство и връща обект с три списъка:

  • add: обектите от submitted, чието свойство не е в saved
  • upd: за обектите, които са и в двата, { db, form } със запазения и изпратения обект
  • rem: стойностите на свойството (не обектите) на елементите от saved, които не са в submitted

Това е обичайната стъпка при запазване на редактируем списък: формулярът изпраща целия списък и трябва да знаете какво е създадено, какво е променено и какво е изтрито. Стойностите се сравняват с ==, така че 1 и '1' са един и същ елемент.

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