0

I know it is probably very simple, but i can't figure it out since 2 days.

{
    "users": [
        {
            "id": 1,
            "name": "Example1",
            "data": [{data: "data1"}, {data:"data2"}]
        },
        {
            "id": 2,
            "name": "Example2",
            "data": [{data: "data3"}, {data:"data4"}]
        }
    ]
}

I want to merge all data's arrays into one. I tried in many ways, for example like this, but it's not what i want.

    let arr = [];
    users.map(el => {
        return arr.push([].concat([...el.data]))
    })
    console.log(arr)

what i want is that :

arr = [{data: "data1"}, {data:"data2"}, {data: "data3"}, {data:"data4"}]

If someone is able to help me I will be extremely grateful.

2 Answers2

1

You can apply a .flat() at the end:

let obj = {
    "users": [
        {
            "id": 1,
            "name": "Example1",
            "data": [{data: "data1"}, {data:"data2"}]
        },
        {
            "id": 2,
            "name": "Example2",
            "data": [{data: "data3"}, {data:"data4"}]
        }
    ]
};

let photos = obj.users.map(({ data }) => [].concat(data)).flat();

console.log(photos);
NullDev
  • 6,739
  • 4
  • 30
  • 54
0

Just map over the array and use flat on the result.

const obj = {
  users: [{
      id: 1,
      name: "Example1",
      data: [{
        data: "data1"
      }, {
        data: "data2"
      }],
    },
    {
      id: 2,
      name: "Example2",
      data: [{
        data: "data3"
      }, {
        data: "data4"
      }],
    },
  ],
};

const result = obj.users.map((o) => o.data).flat();
console.log(result);

or just use flatMap

const obj = {
  users: [{
      id: 1,
      name: "Example1",
      data: [{
        data: "data1"
      }, {
        data: "data2"
      }],
    },
    {
      id: 2,
      name: "Example2",
      data: [{
        data: "data3"
      }, {
        data: "data4"
      }],
    },
  ],
};

const result = obj.users.flatMap((o) => o.data);
console.log(result);
DecPK
  • 24,537
  • 6
  • 26
  • 42