Quel colis pour quelle destination ? - Solution

On se retrouve aujourd'hui pour la solution du précédent #KataOfTheWeek proposé par Maxime en début de semaine !

La solution en Typescript que je propose est basée sur l'utilisation des filtres Javascript, mais il est également possible d'utiliser une boucle for, ou encore une boucle for-of.
Cette solution aborde également la notion de dot-notation et d'array-notation
(l'utilisation du type any est toléré pour le typage du résultat car on ne connait pas le nombre de champs du résultat) :

function splitPackages(packages: string[]) {
    // retrouver toutes les destinations possible
    const destinations: string[] = [];
    const result: any = {};
    let nbErr: number = 0;
    packages.forEach((pkg: string) => {
        if (pkg !== "ERREUR") {
            destinations.push(pkg.substring(0,2))
        } else {
            nbErr++;
        }
    });

    // suppression doublons
    const destUnique: string[] = [...new Set(destinations)];

    // remplir chaque destination avec les numéros de suivi
    destUnique.forEach( (dest: string) => {
        const pkgs: string[] = packages.filter((pack: string) => pack.substring(0,2) === dest);
        result[dest] = pkgs;
    });

    // ajout du nombre d'erreur
    result.err = nbErr;

    return result;
}
// Output : 
// {
//      DE: ["DE7788995U"],
//      err: 1,
//      FR: ["FR123456789A", "FR112233445F"],
//      GB: ["GB987654321X"]
// }
console.log(splitPackages(["FR123456789A", "GB987654321X", "ERREUR", "FR112233445F", "DE7788995U"]));

A bientôt pour un nouveau #KataOfTheWeek !

TakiVeille

TakiVeille