请在这里提供一些指南:我正在做的是从对象数组开始创建一个新的多维对象数组:
[
{number:111, connectedNumber: 112, ...},
{number:112, connectedNumber: 111, ...},
{number:113, connectedNumber: 114, ...},
{number:114, connectedNumber: 113, ...}
....
]
因此,最后,我需要获得一个具有相关对象组的新多维数组:
[
[{number:111, connectedNumber: 112, ...}, {number:112, connectedNumber: 111, ...}],
[{number:113, connectedNumber: 114, ...}, {number:114, connectedNumber: 113, ...}],
]
如您所见,它们与number === connecetedNumber
相关。
直到现在,我正在做的是创建一个新数组并循环遍历原始对象列表,并检查是否number === connecetedNumber
并添加到新数组中:
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]);
}
}
}
但这会返回以下格式的新数组:
[
[{number:111, connectedNumber: 112, ...}, {number:112, connectedNumber: 111, ...}],
[{number:112, connectedNumber: 111, ...}],
[{number:113, connectedNumber: 114, ...}, {number:114, connectedNumber: 113, ...}],
[{number:114, connectedNumber: 113, ...}],
....
]
如您所见,循环在每个元素上运行(如预期的那样),并添加已在上一个数组中添加的下一个元素。
这里有任何指南。
答案 0 :(得分:3)
您可以查找所需的组并将对象添加到其中或创建一个新组。
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; }