创建没有重复项的多维对象数组

时间:2019-03-28 16:05:27

标签: javascript arrays loops

请在这里提供一些指南:我正在做的是从对象数组开始创建一个新的多维对象数组:

[
{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, ...}],
....
]

如您所见,循环在每个元素上运行(如预期的那样),并添加已在上一个数组中添加的下一个元素。

这里有任何指南。

1 个答案:

答案 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; }