jquery store value during loop and compare with next value

0

I need to compare values coming from a json object and group cases to be the same. Ex: {nome: andre,qt:"2"},{nome: andre,qt:"3"},{nome: marco,qt:"2"},{nome: marco,qt:"5"} I need to group in separate objects where I would have: object 1 = {name: andre, qt: "5"} object 2 = {name: frame, qt: "7"}

This comparison would have to be within a loop.

    
asked by anonymous 28.05.2018 / 22:34

1 answer

2

You can do this (see comments in the code):

In this first part, I create objects with different names (eg, objeto_andre , obj_marcos etc.) and add the values in qt to the same name:

var temp = []; // array temporária para guardar os nomes
for(var item of obj){
   var novo_obj = "objeto_"+item.nome; // nome do novo objeto

   if(!window[novo_obj]){
      window[novo_obj] = {nome: item.nome, qt: item.qt}; // se não existe, cria
      temp.push(item.nome);
   }else{
      var q = parseInt(item.qt);
      window[novo_obj].qt = (parseInt(window[novo_obj].qt)+q).toString(); // se existe, soma o valor
   }
}

This second part is just to "rename" created objects:

From objeto_andre to objeto1

From objeto_marcos to objeto2 ...

// criar cópia dos objeto para objeto1, objeto2 etc...
for(var o in temp){
   var nome = temp[o];
   window["objeto"+ (parseInt(o)+1)] = window["objeto_"+nome];
   delete window["objeto_"+nome]; // deleto o objeto com o nome original
}

The result is as in this image, separated by names and summed values:

Running:

var obj = [
   {nome: "andre", qt: "2"},
   {nome: "andre", qt: "3"},
   {nome: "marco", qt: "2"},
   {nome: "marco", qt: "5"},
   {nome: "paulo", qt: "11"},
   {nome: "andre", qt: "1"}
];

var temp = []; // array temporária para guardar os nomes
for(var item of obj){
   var novo_obj = "objeto_"+item.nome; // nome do novo objeto
   
   if(!window[novo_obj]){
      window[novo_obj] = {nome: item.nome, qt: item.qt}; // se não existe, cria
      temp.push(item.nome);
   }else{
      var q = parseInt(item.qt);
      window[novo_obj].qt = (parseInt(window[novo_obj].qt)+q).toString(); // se existe, soma o valor
   }
}

// criar cópia dos objeto para objeto1, objeto2 etc...
for(var o in temp){
   var nome = temp[o];
   window["objeto"+ (parseInt(o)+1)] = window["objeto_"+nome];
   delete window["objeto_"+nome]; // deleto o objeto com o nome original
}

console.log("Objeto 1", objeto1);
console.log("Objeto 2", objeto2);
console.log("Objeto 3", objeto3);
  

Taking into account that names do not have spaces, accents or   characters. If there is such a possibility,   call another function that removes those characters.

    
29.05.2018 / 00:35