Reputation: 1481
need for some guide here please: what I´m doing is creating a new multidimensional array of objects starting from an array of objects:
[
{number:111, connectedNumber: 112, ...},
{number:112, connectedNumber: 111, ...},
{number:113, connectedNumber: 114, ...},
{number:114, connectedNumber: 113, ...}
....
]
So at the end, I need to get a new multidimensional array with groups of related objects:
[
[{number:111, connectedNumber: 112, ...}, {number:112, connectedNumber: 111, ...}],
[{number:113, connectedNumber: 114, ...}, {number:114, connectedNumber: 113, ...}],
]
As you can see, they are related with the number === connecetedNumber
.
Until now what I´m doing is creating a new array and looping trough the original list of objects and check if number === connecetedNumber
and added to the new array:
for (let j = count; numbers.length > j; j++) {
organizedNumber.push([numbers[j]]);
for (let k = j; numbers.length > k; k++) {
if (numbers[j].number === numbers[k].connectedNumber) {
organizedNumber[j].push(numbers[k]);
}
}
}
but this return a new array in this format:
[
[{number:111, connectedNumber: 112, ...}, {number:112, connectedNumber: 111, ...}],
[{number:112, connectedNumber: 111, ...}],
[{number:113, connectedNumber: 114, ...}, {number:114, connectedNumber: 113, ...}],
[{number:114, connectedNumber: 113, ...}],
....
]
As you can see the loop it´s running over each element (As expected), and adds the next element that it´s already added in the previous array.
Any guide here please.
Upvotes: 1
Views: 62
Reputation: 386883
You could look for the wanted group and add the object to it or create a new group.
var data = [{ number: 111, connectedNumber: 112 }, { number: 112, connectedNumber: 111 }, { number: 113, connectedNumber: 114 }, { number: 114, connectedNumber: 113 }],
grouped = data.reduce((r, o) => {
const
caseA = a => a.some(({ number }) => o.connectedNumber === number),
caseB = a => a.some(({ connectedNumber }) => o.number === connectedNumber),
temp = r.find(caseA) || r.find(caseB) || [];
if (!temp.length) r.push(temp);
temp.push(o);
return r;
}, []);
console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Upvotes: 2