2 votes

Créer un tableau multidimensionnel d'objets sans doublons

J'ai besoin d'un guide : ce que je fais est de créer un nouveau tableau multidimensionnel d'objets à partir d'un tableau d'objets :

[
{number:111, connectedNumber: 112, ...},
{number:112, connectedNumber: 111, ...},
{number:113, connectedNumber: 114, ...},
{number:114, connectedNumber: 113, ...}
....
]

À la fin, je dois donc obtenir un nouveau tableau multidimensionnel contenant des groupes d'objets apparentés :

[
   [{number:111, connectedNumber: 112, ...}, {number:112, connectedNumber: 111, ...}],
   [{number:113, connectedNumber: 114, ...}, {number:114, connectedNumber: 113, ...}],
]

Comme vous pouvez le constater, ils sont liés à la number === connecetedNumber .

Jusqu'à présent, ce que je fais, c'est de créer un nouveau tableau et de parcourir en boucle la liste originale d'objets et de vérifier si number === connecetedNumber et ajoutés au nouveau tableau :

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]);
                }
            }
        }

mais celui-ci renvoie un nouveau tableau dans ce 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, ...}],
....
]

Comme vous pouvez le voir, la boucle passe sur chaque élément (comme prévu), et ajoute l'élément suivant qu'elle a déjà ajouté dans le tableau précédent.

Un guide, s'il vous plaît.

3voto

Nina Scholz Points 17120

Vous pouvez rechercher le groupe souhaité et y ajouter l'objet ou créer un nouveau groupe.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X