0

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

1 Answer 1

2

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

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.