Partage
  • Partager sur Facebook
  • Partager sur Twitter

Additionner les valeurs de plusieurs tableaux en f° des clés

Sujet résolu
    16 juin 2010 à 23:48:37

    Je reçois plusieurs tableaux avec une liste d'utilisateur et leur contribution pour différents projets. Cette contribution étant toujours un nombre.
    Je souhaite obtenir qu'un seul tableau avec chaque nom d'utilisateur qui n'apparaissent qu'une fois et triés dans l'ordre décroissant en fonction des valeurs.

    Exemple de ce que je souhaite:
    var array1= new array()
       array1["Toto"] = 142;
       array1["Pierre"] = 137;
       array1["Bob"] = 21;
    
    var array2= new array()
       array2["Toto"] = 142;
       array2["Pom"] = 7;
       array2["Robert"] = 1;
    
    // (...)Fonction? Avec pour résultat, un tableau avec toutes les valeurs additionnés et triés.
    
     resultat["Toto"] = 284;
     resultat["Pierre"] = 137;
     resultat["Bob"] = 21;
     resultat["Pom"] = 7;
     resultat["Robert"] = 1;
    


    Existe t-il une fonction qui fait cela automatiquement et pour un grand nombre de table à la fois?
    Sinon quel type de technique je peux utiliser? Les tableaux, c'est vraiment ma bête noire dans n'importe quel langage, mais là je n'ai pas le choix. Je vais quand même faire un effort pour essayer de trouver une solution par moi même, mais ce serait vraiment trop bête de passer à côté d'une fonction qui fais cela.
    • Partager sur Facebook
    • Partager sur Twitter
      17 juin 2010 à 0:26:49

      Une fonction toute faite en javascript, non, il n'y en a pas.
      Après j'imagine qu'avec une combinaison de concat() et sort(), on doit arriver à quelque chose d'exploitable. Mais si en plus tu cherches à additionner les valeurs pour chaque clé... A part te faire une fonction à la main, je ne vois pas
      • Partager sur Facebook
      • Partager sur Twitter
      Directeur technique, créateur de jeux HTML5 et fan de JavaScript | La suite de OnHack est sur les rails !
        17 juin 2010 à 8:06:30

        Citation : pom45i

        Je reçois plusieurs tableaux avec une liste d'utilisateur et leur contribution pour différents projets. Cette contribution étant toujours un nombre.
        Je souhaite obtenir qu'un seul tableau avec chaque nom d'utilisateur qui n'apparaissent qu'une fois et triés dans l'ordre décroissant en fonction des valeurs.

        Exemple de ce que je souhaite:

        var array1= new array()
           array1["Toto"] = 142;
           array1["Pierre"] = 137;
           array1["Bob"] = 21;
        
        var array2= new array()
           array2["Toto"] = 142;
           array2["Pom"] = 7;
           array2["Robert"] = 1;
        
        // (...)Fonction? Avec pour résultat, un tableau avec toutes les valeurs additionnés et triés.
        
         resultat["Toto"] = 284;
         resultat["Pierre"] = 137;
         resultat["Bob"] = 21;
         resultat["Pom"] = 7;
         resultat["Robert"] = 1;
        



        Existe t-il une fonction qui fait cela automatiquement et pour un grand nombre de table à la fois?
        Sinon quel type de technique je peux utiliser? Les tableaux, c'est vraiment ma bête noire dans n'importe quel langage, mais là je n'ai pas le choix. Je vais quand même faire un effort pour essayer de trouver une solution par moi même, mais ce serait vraiment trop bête de passer à côté d'une fonction qui fais cela.



        ne pas confondre array et objets là on est en JS pas en PHP, il peut y avoir des conséquences quand tu parcours le tableau comme ci c'était un objet. Déjà tu remplace array par {}.

        Donc je répète il ne faut pas utilise Array mais Object qui remplacé littéralement s'écrit :
        var obj = {};
        obj['toto'] = 1;
        

        au final cela donne ça :
        http://jsfiddle.net/S2hQA/
        var obj1 = {
            "Toto" : 142,
            "Pierre" : 137,
            "Bob" : 21
        };
        
        var obj2 = {
            "Toto" : 142,
            "Pom" : 7,
            "Robert" : 1
        };
        
        var resultat = {};
        
        function addToResultat(obj) {
            for (var i in obj) {
                //créé l'élément avec valeur 0 s'il n'existe pas
                if(!resultat[i])
                    resultat[i] = 0;
                //additionne
                resultat[i] += obj[i];
            }
        }
        
        addToResultat(obj1);
        addToResultat(obj2);
        
        //liste des valeurs pour le resultat 
        for (var i in resultat) {
            document.write(i+'='+resultat[i]+'<br>');   
        }
        
        
        
        ​
        

        • Partager sur Facebook
        • Partager sur Twitter
          17 juin 2010 à 8:11:34

          Merci beaucoup. Cela a l'air d'être exactement ce dont j'avais besoin.
          • Partager sur Facebook
          • Partager sur Twitter

          Additionner les valeurs de plusieurs tableaux en f° des clés

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown