ForgeTotal.js 5
el

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