Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

insert multiple object with same key-value in array based on condition in javascript

I have object that has multiple values for example

let obj = {
  a: "day1",
  b: "",
  c: "day3",
  aa: 10,
  bb: 11,
  cc: 12,
}
let data = {};
let item = [];
for (let i in obj) {
  if (i === 'a') {
    data["title"] = obj.a;
    data['value'] = obj.aa;
  }
  if (i === 'b') {
    data["title"] = obj.b;
    data['value'] = obj.bb;
  }
  if (i === 'c') {
    data["title"] = obj.c;
    data['value'] = obj.cc;
  }
  item.push(data);
}
console.log(item)

but I’m getting only last day3 value in multiple times .

item [
        {title:"day3",value:12},
        {title:"day3",value:12},
{title:"day3",value:11}
        ]

I want in the following format

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

item [
    {title:"day1",value:10},
    {title:"day3",value:11}
    ]

please help, thanks in advance.

>Solution :

You should declare the data variable inside the loop because otherwise you are always changing its value at each iteration and that object is what you are adding to the item variable and its value it’s always written over the previous one. If you create a new object at each iteration it will be on its own and no further iteration is going to overwrite its value.

*As it was pointed out in the comments, I added a check in your loop to skip iterations not belonging to the cases: ‘a’,’b’,’c’; so that your final array won’t contain empty objects.

let obj = {
  a: "day1",
  b: "",
  c: "day3",
  aa: 10,
  bb: 11,
  cc: 12,
}
let item = [];
for (let i in obj) {

  //this check decides if you want to skip this iteration
  //so that you won't have empty object appended to your result array
  if(i!='a' && i!='b' && i!='c')
      continue;
  
  //this was (before) the only thing I changed
  let data = {};
  if (i === 'a') {
    data["title"] = obj.a;
    data['value'] = obj.aa;
  }
  if (i === 'b') {
    data["title"] = obj.b;
    data['value'] = obj.bb;
  }
  if (i === 'c') {
    data["title"] = obj.c;
    data['value'] = obj.cc;
  }
  item.push(data);
}
console.log(item)
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading