I have a list of departments, im trying to count how many departments exist for each one, and increment a variable (for ex i
) so i can call it outside the loop and affect it as label to each department.
I started by this but it does not work :
import publicationTotal from "../data/agora-export-publicationtotal-20210803164942.json";
let stringified, myObj, subkeys;
stringified = JSON.stringify(publicationTotal);
myObj = JSON.parse(stringified);
subkeys = Object.keys(myObj[0]);
let departement= {};
let star = [];
for (let x in myObj) {
if (Object.prototype.hasOwnProperty.call(myObj, x)) {
for (let y in subkeys) {
if (Object.prototype.hasOwnProperty.call(subkeys, y)) {
if (subkeys[y] === "Departement") {
// star = myObj[x][subkeys[y]] 1;
star = departement[ myObj[x][subkeys[y]] ] = departement[ myObj[x][subkeys[y]] ] 1;
console.log("dept : ", star);
}
}
}
}
}
the publicationTotal file contains this kind of information :
[
{
"Departement": "Yonne"
},
{
"Departement": "Yonne"
},
{
"Departement": "Yonne"
},
{
"Departement": "Yonne"
},
{
"Departement": "Essonne"
},
{
"Departement": "Essonne"
},
{
"Departement": "Essonne"
},
{
"Departement": "Essonne"
},
{
"Departement": "Essonne"
},
{
"Departement": "Essonne"
},
{
"Departement": "Essonne"
},
{
"Departement": "Essonne"
},
{
"Departement": "Seine-Saint-Denis"
},
{
"Departement": "Seine-Saint-Denis"
},
{
"Departement": "Seine-Saint-Denis"
},
{
"Departement": "Seine-Saint-Denis"
},
{
"Departement": "Val-de-Marne"
},
{
"Departement": "Val-de-Marne"
},
{
"Departement": "Val-de-Marne"
},
{
"Departement": "Val-d\u0027Oise"
}
]
For example, i
variable will have 4 for "Yonne" department, and 3 for "Val-de-Marne" department.
Expected result is to have the department name ans the number separatly, so i can call them where i want
CodePudding user response:
const publicationTotal=[{Departement:"Yonne"},{Departement:"Yonne"},{Departement:"Yonne"},{Departement:"Yonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Seine-Saint-Denis"},{Departement:"Seine-Saint-Denis"},{Departement:"Seine-Saint-Denis"},{Departement:"Seine-Saint-Denis"},{Departement:"Val-de-Marne"},{Departement:"Val-de-Marne"},{Departement:"Val-de-Marne"},{Departement:"Val-d'Oise"}];
let results = {};
publicationTotal.forEach(({
Departement
}) => {
if (results[Departement] === undefined) {
results[Departement] = 0
} else {
results[Departement] = results[Departement] 1
}
})
console.log(results)
CodePudding user response:
if the department already exits? get it and increment by 1 else set 1
const departments = [{"Departement":"Yonne"},{"Departement":"Yonne"},{"Departement":"Yonne"},{"Departement":"Yonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Seine-Saint-Denis"},{"Departement":"Seine-Saint-Denis"},{"Departement":"Seine-Saint-Denis"},{"Departement":"Seine-Saint-Denis"},{"Departement":"Val-de-Marne"},{"Departement":"Val-de-Marne"},{"Departement":"Val-de-Marne"},{"Departement":"Val-d\u0027Oise"}];
const result = departments.reduce((acc, item) => (
acc[item['Departement']] =acc[item['Departement']]
?
acc[item['Departement']] 1
:
1,
acc),{}
);
console.log(result);
// to get only department names
console.log("departments: ", Object.keys(result));
// to get only no of depatment
console.log("department values: ", Object.values(result));
CodePudding user response:
Array.reduce
to use the name as key and count as value
const publicationTotal = [{Departement:"Yonne"},{Departement:"Yonne"},{Departement:"Yonne"},{Departement:"Yonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Seine-Saint-Denis"},{Departement:"Seine-Saint-Denis"},{Departement:"Seine-Saint-Denis"},{Departement:"Seine-Saint-Denis"},{Departement:"Val-de-Marne"},{Departement:"Val-de-Marne"},{Departement:"Val-de-Marne"},{Departement:"Val-d'Oise"}];
const output = publicationTotal.reduce((acc, curr) => {
acc[curr.Departement] ? acc[curr.Departement] : acc[curr.Departement] = 1;
return acc;
}, {});
console.log(output);
CodePudding user response:
I finally found this solution :
import departement_list from "../data/departements-region.json";
import publicationTotal from "../data/agora-export-publicationtotal-20210803164942.json";
let stringified, myAgora, subkeys;
stringified = JSON.stringify(publicationTotal);
myAgora = JSON.parse(stringified);
subkeys = Object.keys(myAgora[0]);
let departement = {};
for (let x in myAgora) {
if (Object.prototype.hasOwnProperty.call(myAgora, x)) {
for (let y in subkeys) {
if (Object.prototype.hasOwnProperty.call(subkeys, y)) {
if (subkeys[y] === "Departement") {
if (myAgora[x][subkeys[y]] in departement) {
departement[myAgora[x][subkeys[y]]] =
departement[myAgora[x][subkeys[y]]] 1;
} else {
departement[myAgora[x][subkeys[y]]] = 1;
}
}
}
}
}
}