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);