dbljn
dbljn

Reputation: 109

Merge objects inside arrays, which are inside an array

currently I have a little problem, which I am not quite able to solve. I have an array, which can contain single, or more arrays, which than can contain multiple objects. So for instance:

const arr = [
  [
    {
      "value": "value A"
    },
    {
      "value": "value B"
    },
    {
      "value": "value C"
    }
  ],
  [
    {
      "value": "value A"
    },
    {
      "value": "value B"
    },
    {
      "value": "value C"
    }
  ]
]

And I want to merge the objects based on a specific property (here "value") into an array, so that my result will look like that:

const result = ["value A", "value B", "value C", "value A", "value B", "value C"]

Someone got an idea for that? Thank you!

Upvotes: 1

Views: 46

Answers (4)

yunzen
yunzen

Reputation: 33449

I use nested reduce and map methods of the Array.prototype

{
  const arr = [
    [{
        "value": "value A"
      },
      {
        "value": "value B"
      },
      {
        "value": "value C"
      }
    ],
    [{
        "value": "value A"
      },
      {
        "value": "value B"
      },
      {
        "value": "value C"
      }
    ]
  ];
  
  const newArr = arr.reduce((carry, item) => {
     carry.push(...item.map(item2 => item2.value))
     return carry;
  }, [])
  
  console.log(newArr)
}

Upvotes: 0

SoulKa
SoulKa

Reputation: 195

Like this?

const arr = [
  [
    {
      "value": "value A"
    },
    {
      "value": "value B"
    },
    {
      "value": "value C"
    }
  ],
  [
    {
      "value": "value A"
    },
    {
      "value": "value B"
    },
    {
      "value": "value C"
    }
  ]
]

function mergeArray( arr, property ) {
  const res = [];
  for (const innerArr of arr) {
    for (const obj of innerArr) {
      res.push(obj[property]);
    }
  }
  return res;
}

console.log(mergeArray(arr, "value"));

Upvotes: 0

MorKadosh
MorKadosh

Reputation: 6005

I believe your desired result is an array, and not object. The output example of yours is invalid.

Anyway, use simple reduce:

const arr = [
  [
    {
      "value": "value A"
    },
    {
      "value": "value B"
    },
    {
      "value": "value C"
    }
  ],
  [
    {
      "value": "value A"
    },
    {
      "value": "value B"
    },
    {
      "value": "value C"
    }
  ]
]

const result = arr.reduce((acc, cur) => {
  const values = cur.map(({value}) => value);
  return acc.concat(values)
}, []);

console.log(result);

Upvotes: 0

Andre Marasca
Andre Marasca

Reputation: 270

const arr = [
  [
    {
      "value": "value A"
    },
    {
      "value": "value B"
    },
    {
      "value": "value C"
    }
  ],
  [
    {
      "value": "value A"
    },
    {
      "value": "value B"
    },
    {
      "value": "value C"
    }
  ]
]

let x = arr.flat().map(v=>v.value);

console.log(x);

Upvotes: 3

Related Questions