Reputation: 109
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
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
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
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
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