Raggruppare JSON per campo con Javascript

Mattepuffo's logo
Raggruppare JSON per campo con Javascript

Raggruppare JSON per campo con Javascript

Supponiamo di avere un JSON di questo tipo:

[{
	"id": "204",
	"title": "fondazione e terra",
	"author_id": null,
	"author": "isaac asimov",
	"editor_id": null,
	"editor": "oscar mondadori",
	"price": "26.49",
	"isbn": "88-04-32634-4",
	"note": "usato"
}, {
	"id": "202",
	"title": "l'orlo della fondazione",
	"author_id": null,
	"author": "isaac asimov",
	"editor_id": null,
	"editor": "oscar mondadori",
	"price": "30.99",
	"isbn": "978-88-04-39816-5",
	"note": "usato"
}, {
	"id": "217",
	"title": "preludio alla fondazione",
	"author_id": null,
	"author": "isaac asimov",
	"editor_id": null,
	"editor": "mondadori",
	"price": "27.90",
	"isbn": "88-04-32450-3",
	"note": "usato"
}]

E di volerlo raggruppare, andando a sommare un determinato campo.

Nel caso specifico vogliamo raggruppare per editor e sommare il campo price.

Possiamo usare le funzioni reduce e find per lo scopo.

Notate inoltre che il campo price è in formato stringa, e quindi non possiamo sommarli direttamente (guardate questa discussione sul form HTML.it).

Ecco il codice Javascript:

let json = '....................';
var objArr = JSON.parse(json);

const output = objArr.reduce((accumulator, cur) => {
	let found = accumulator.find(elem => elem.editor === cur.editor);
	if (found) {
		found.price = Number(found.price) + Number(cur.price);
	} else {
		accumulator.push(cur);
	}
	return accumulator;
}, []);

console.log(output);

Enjoy!


Share this Post

Commentami!