Home > Blockchain >  how can i increment variable according of number of proprety object
how can i increment variable according of number of proprety object

Time:10-04

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;
          }
        }
      }
    }
  }
}
  • Related