I'm having a problem manipulating an array of objects inside another array.I created an example to explain what I need. So here we have this array:
array1 =
[
{
"first": "A",
"second": [
"one"
]
},
{
"first": "A",
"second": [
"three"
]
},
{
"first": "C",
"second": [
"four"
]
},
{
"first": "D",
"second": [
"one"
]
},
{
"first": "C",
"second": [
"three"
]
},
]
I've been trying to create a logic to manipulate this array and return something like this:
result =
[
{
"first": "A",
"second": [
"one",
"three"
]
},
{
"first": "C",
"second": [
"three",
"four"
]
},
{
"first": "D",
"second": [
"one"
]
},
]
for(let i = 0, n = result.length; i < n; ++i) {
for(let k = 0, l = result[i].second.length; k < l; ++k) {
result[i].second.push("anything");
}
}
Could you try this ?
let result = [];
array1.forEach(obj => {
if(!result[obj.first]) {
result[obj.first] = {
first: obj.first
, second: []
}
}
result[obj.first].second.push(obj.second[0])
})
You can go with the following approach:
array1 =
[
{
"first": "A",
"second": [
"one"
]
},
{
"first": "A",
"second": [
"three"
]
},
{
"first": "C",
"second": [
"four"
]
},
{
"first": "D",
"second": [
"one"
]
},
{
"first": "C",
"second": [
"three"
]
},
]
var array2 = []
array1.forEach(function(item) {
var existing = array2.filter(function(v, i) {
return v.first == item.first;
});
if (existing.length) {
var existingIndex = array2.indexOf(existing[0]);
array2[existingIndex].second = array2[existingIndex].second.concat(item.second);
} else {
if (typeof item.second == 'string')
item.second = [item.second];
array2.push(item);
}
});
console.log(array2);