Reputation: 365
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!
Upvotes: 1
Views: 117
Reputation: 752
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.
map()
through the animals array to get the desired array of objects and store it in a result variable.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.
Upvotes: 4
Reputation: 9344
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)
Upvotes: 2
Reputation: 147
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);
Upvotes: 2