How can I group an array with nested array?
Does anyone know a simple way to group an array with nested array? For example, i have an array of animals:
[
['Cat', 'Dog', 'Monkey'],
['my pet', 'it is animals', 'terrestrial animals']
]
I want to make new array with format that's grouped by ['Cat', 'Dog', 'Monkey']
:
[
{
groupTitle: 'Cat',
relations: ['my pet', 'it is animals', 'terrestrial animals']
},
{
groupTitle: 'Dog',
relations: ['my pet', 'it is animals', 'terrestrial animals']
},
{
groupTitle: 'Monkey',
relations: ['my pet', 'it is animals', 'terrestrial animals']
}
]
How can i do it? Thanks!
Solution 1:
Using map()
const arr = [
['Cat', 'Dog', 'Monkey'],
['my pet', 'it is animals', 'terrestrial animals']
]; // original data
const [groupTitles, relations] = arr; // array destructuring to get individual sub-arrays
const result = groupTitles.map(groupTitle => ({
groupTitle,
relations
}));
console.log(result); // print result
I used the following approach to achieve your desired outcome.
- Use Array destructuring to get the individual arrays from the original array.
-
map()
through the animals array to get the desired array of objects and store it in a result variable.
Using reduce()
const arr = [
['Cat', 'Dog', 'Monkey'],
['my pet', 'it is animals', 'terrestrial animals'],
]; // original array
const result = arr[0].reduce((a, b) => {
return [
...a, // previously calculated values
{ // new value
groupTitle: b,
relations: arr[1],
},
];
}, []);
console.log(result); // print result
The same result can also be achieved using reduce()
method as required.
Solution 2:
You can make a nested iteration using for loop for example:
const arr = [
["Cat", "Dog", "Monkey"],
["my pet", "it is animals", "terrestrial animals"],
];
let newArr = [];
for (let i = 0; i <= arr.length; i++) {
for (let j = 0; j < arr[0].length; j++) {}
newArr.push({ groupTitle: arr[0][i], relations: arr[1] });
}
console.log(newArr);
Solution 3:
Using destructuring assignments
const arr = [
['Cat', 'Dog', 'Monkey'],
['my pet', 'it is animals', 'terrestrial animals']
]
let a,b,c, obj, newArr = [];
[a,b,c] = arr[1]
arr[0].forEach(el => {
obj = {
groupTitle: el,
relations: [a,b,c]
}
newArr.push(obj)
})
console.log(newArr)