IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Erreur : replaceAll is not a function


Sujet :

JavaScript

  1. #1
    Membre averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut Erreur : replaceAll is not a function
    Bonjour,

    Je m'entraine à faire quelques exercices de JS sur une plateforme d'entrainement.

    J'obtiens l'erreur mentionnée dan le titre sur la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return t.replaceAll(/0/g,'1');
    Voici la fonction entière qui fonctionne correctement sur js fiddle mais pas sur la plateforme (code wars) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    function test(s) {
    let infected =0;
    let safe=0;
     
      let tab = s.split("X").map((t) => {
      	if(t.includes('1')) {
        infected+=t.length;
        	return t.replaceAll(/0/g,'1');
        } else {
        safe+=t.length;
        return t;
        }
      });
      console.log(infected/(infected+safe)*100);
      return infected/(infected+safe)*100;
     
    }
     
    infected("01000000X000X011X0X");
    merci pour votre aide

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Bonjour,

    Sur quel navigateur rencontrez-vous le problème ? En avez-vous essayé un autre ?

    Votre exemple semble incorrect.
    Vous définissez une fonction qui s'appelle test() et vous appelez infected("01000000X000X011X0X");.
    Difficile d'être certain de ce que vous faites et donc de comment tester.

    D'ailleurs dans votre fonction, vous définissez la variable tab qui est censée contenir le résultat de votre replaceAll() mais vous ne faites rien du tout avec, c'est étrange...

    Perso, voici le code que j'ai testé et je n'ai aucune erreur (testé sur Chrome, Firefox & MS Edge) (il y a bien une erreur sur Internet Explorer mais ça n'a pas de sens d'en tenir compte)

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <script>
        function test(s) {
            let infected = 0;
            let safe = 0;
     
            let tab = s.split("X").map((t) => {
                if (t.includes('1')) {
                    infected += t.length;
                    console.log('return ici', t);
                    return t.replaceAll(/0/g, '1');
                } else {
                    console.log('return là ', t);
                    safe += t.length;
                    return t;
                }
            });
            console.log('infected result', infected / (infected + safe) * 100);
            return infected / (infected + safe) * 100;
     
        }
     
        test("01000000X000X011X0X");
    </script>


    Affiche en console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    return ici 01000000
    return000
    return ici 011
    return0
    return là  
    tab (5) ['11111111', '000', '111', '0', '']
    infected result 73.33333333333333

  3. #3
    Membre averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut
    Oui, veuillez m'excuser, j'ai commis des erreurs d'étourderie, merci de les avoir rectifiées.
    Du coup, en utilisant le code que vous fournissez, j'ai toujours la même erreur. Voici une capture d'écran du script sur la plateforme qui génère le soucis.

    Nom : Capture d’écran 2021-09-14 141006.png
Affichages : 73
Taille : 22,6 Ko

    Puis le log d'erreur en lui-même :

    Nom : Capture d’écran 2021-09-14 141027.png
Affichages : 73
Taille : 14,0 Ko

    A toutes fins utiles, voici le lien de l'exercice : https://www.codewars.com/kata/5e2596...ain/javascript

    Merci pour votre aide

  4. #4
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Bonjour d'après l'énoncé, tu n'as pas besoin de "remplacer" les 0 par des 1 :
    • 1 infecté -> tous infectés

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function infected(s) {
      let total = 0; // nombre total
      let infec = 0; // nombre infectés
      let ratio = 0;
      s.split('X').map((t) => {
        total += t.length; // on incrémente le total
        if( t.includes('1') ) // 1 infecté -> tous infectés
        {
          infec += t.length; // on incrémente les infectés
        }
      });
      ratio = (total!=0)? (100*infec/total) : 0; // pourcentage
    //  ratio = (total!=0)? Math.floor(1000*infec/total)/10 : 0; // pourcentage, à 1 décimale
      return ratio;
    /* // résultat complet
      let affich = 'Population totale : '+total+"\n";
      affich += 'Nombre d\'infectés : '+infec+"\n";
      affich += 'Pourcentage d\'infectés : '+ratio+'%';
      return affich;
    */
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let s = "01000000X000X011X0X";
    console.log( s );
    console.log( infected(s) );
    Sinon, concernant le message d'erreur, il semble que ce soit un problème de version de JS sur le site.
    Note that the String.prototype.replaceAll() method was added in ES2021/ES12.

  5. #5
    Membre averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut
    Merci, c'est vrai que dans l'exemple de l'énoncé, ils classent les 0 et les 1, mais effectivement c'est inutile !
    Bon en tout cas, impossible de soumettre l'exercice !

  6. #6
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Re.

    1- sur le site www.codewars.com :

    2- il faut aussi traiter le cas "XXXXX" (total=0, or la division par 0 est interdite)
    d'où :
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
      ratio = (total!=0)? (100*infec/total) : 0; // pourcentage

    3- mon code (ci-après réduit) passe le test avec succès !

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function infected(s) {
      let infec = 0;
      let total = 0;
      s.split("X").map((t) => {
        total += t.length;
        if(t.includes('1')) {
          infec += t.length;
        }
      });
      return (total != 0)? (infec/total)*100 : 0; // pourcentage
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Erreur : $.ajax is not a function
    Par js777 dans le forum jQuery
    Réponses: 1
    Dernier message: 20/12/2019, 18h05
  2. Erreur dispatchEvent is not a function
    Par lobarbad dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/11/2018, 19h26
  3. Erreur : X is not a function (evaluating 'Y(n)')
    Par Anonyme1784 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/06/2015, 22h47
  4. [AJAX] erreur : load is not a function
    Par Agriesean dans le forum AJAX
    Réponses: 4
    Dernier message: 11/11/2011, 12h02
  5. [AJAX] erreur: is not a function avec liste déroulante
    Par dr_octopus74 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/04/2007, 13h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo