I have below code of data. It is an object and each key has a date to it. There are properties Open and Closed within it. If Closed is 0, then that property is not present.
let data = {
          "2021-09-06": {
            "Open": 24
          },
          "2021-09-07": {
            "Open": 80,
            "Closed": 14
          },
        }
I want to achieve the following
let res = [
          { "date": "2021-09-06", "Open": 24, "Closed": 0 },
          { "date": "2021-09-07", "Open": 80, "Closed": 14 },
        ]
Can someone please let me know how to achieve this. I have tried this way but i dont get date property within the object as i want.
Object.entries(data).map((e) => ( { [e[0]]: e[1] } ));
Advertisement
Answer
You’re on the right track.
Object.entries() returns an array of [key, value] tuples, so in your case each entry will look something like ['2021-09-06', { Open: 24,}].
You can destructure this passed tuple in the map() call which makes it more descriptive.
Object.entries(data).map(([date, value]) => ...
You can then use shorthand asignment to create the date property, declare a default Closed: 0 property, and then use spread syntax to apply the existing properties of the value object which will overwrite the Closed property if it exists in the original.
let data = { 
  '2021-09-06': { Open: 24, },
  '2021-09-07': { Open: 80, Closed: 14, },
};
const result = Object.entries(data).map(([date, value]) => ({ date, Closed: 0, ...value }));
console.log(result);