jquery store value during loop and compare with next value

Asked

Viewed 81 times

0

I need to compare values that come in a json object and group cases to be equal. Ex: {nome: andre,qt:"2"},{nome: andre,qt:"3"},{nome: marco,qt:"2"},{nome: marco,qt:"5"} I need to group into separate objects where I would have : object 1 = {name: Andre,Qt:"5"} object 2 = {name: mark,Qt:"7"}

this comparison would have to be within a loop .

  • You can create another array to store only the groups

  • It is possible that in the looping the values are compared and after creating the separate objects?

1 answer

2

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

In this first part, I create objects with different names (e.g.., objeto_andre, obj_marcos etc.) and are the values in qt for 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 only to "rename" the created objects:

Of objeto_andre for objeto1

Of objeto_marcos for 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 added values:

inserir a descrição da imagem aqui

In operation:

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 special characters. If this is possible, it will be necessary to call another function that removes these characters.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.