Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récursivité et tableaux imbriqués

Sujet résolu
    26 mai 2018 à 23:21:38

    Bonjour à tous,

    Je suis actuellement une formation de développeur web, et le sujet de ce week end nous a donné quelques difficultés.

    En gros on a un if de test qui doit renvoyer ça :

    if (
      sum([1, 2, 3]) === 6
      && sum(['un', 2, 'trois', 4, 'cinq']) === 6
      && sum([]) === 0
      && sum([1, [2, 3, [4, 5], 6], 7, [8, 9]]) === 45
    ) {
      container.textContent = 'Yeaaah';
      container.className = 'success';
    }
    else {
      container.textContent = 'Nope';
      container.className = 'error';
    }

    Et pour le dernier test on a décidé de partir sur une récursive pour additionner les éléments de tout les tableaux, seulement notre variable result stocke la valeur séparée de la somme de chaque tableau, et pas moyen d'additionner l'ensemble pour obtenir 45..
    Voici notre code :

    function sum(arr) {
      var i = 0;
      var result = 0;
    if (arr.length === 0) {
      return 0;
    }
    
    while (i < arr.length) {
        if (typeof arr[i] === 'number') {
          result = result + arr[i];
        }
        if (Array.isArray(arr[i]) === true) {
          sum(arr[i]);
        }
      i++;
    }
    console.log(result);
    return result;
    }


    Merci à ceux qui jetteront un coup d'oeil ;)

    • Partager sur Facebook
    • Partager sur Twitter
      27 mai 2018 à 0:24:16

      Pourtant il suffit de faire une toute petite modif en ajoutant sum(arr[i]) à result :

      function sum(arr) {
        var i = 0;
        var result = 0;
        if (arr.length === 0) {
          return 0;
        }
      
        while (i < arr.length) {
          if (typeof arr[i] === 'number') {
            result = result + arr[i];
          }
          if (Array.isArray(arr[i]) === true) {
            result += sum(arr[i]);
          }
          i++;
        }
        return result;
      }

      Et si on épure un peu le tout, on peut réduire à ceci pour le même résultat :

      function sum(arr) {
        let result = 0;
        arr.forEach((value) => {
          if (!isNaN(value)) {
            result += value;
          } else if (Array.isArray(value)) {
            result += sum(value);
          }
        });
        return result;
      }

      -
      Edité par SpaceIn 27 mai 2018 à 0:44:56

      • Partager sur Facebook
      • Partager sur Twitter
        27 mai 2018 à 1:13:42

        La fatigue.... on va dire ça ^^ et puis bon on a pas encore vu la récursivité, alors on a essayé comme on a pu !

        En tout cas merci beaucoup :D
        • Partager sur Facebook
        • Partager sur Twitter

        Récursivité et tableaux imbriqué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