11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
Je suis en train de coder une fonction qui calcule la proportion de chaque caractère dans une variable, puis l'afficher, mais je n'arrive pas à faire le tableau correctement :
https://jsfiddle.net/exercices/g27L4vt8/1/ (il s'agit de la fonction writeProportionOfEachCharacter).
Mais la fonction proportionOfEachCharacter fonctionnait à peu près : elle m'écrivait
[s,1,7.14%],[a,3,21.43%],[l,1,7.14%],[u,1,7.14%],[t,1,7.14%],[,,1,7.14%],[ ,3,21.43%],[ç,1,7.14%],[v,1,7.14%],[?,1,7.14%]
pour "Salut, ça va ?" : ce que je voulais

Je pense que l'erreur vient d'ici :
list.push("['" + text[i] + "'," + (text.split(text[i]).length - 1) + ",'" + (100 * ((text.split(text[i]).length - 1) / charactersNb)).toFixed(2) + "%']");


Merci pour votre aide !! Smiley biggrin
Modifié par js_html (17 Feb 2021 - 12:32)
Modérateur
Salut,

Non l'erreur vient de l'affichage :
display += "* " + list[i][0] + " : " + list[i][2] + "\n"


Tu log ton résultat dans la console donc tu as pu voir qu'il était bien :
["['s',1,'7.14%']", "['a',3,'21.43%']", "['l',1,'7.14%']", "['u',1,'7.14%']", "['t',1,'7.14%']", "[',',1,'7.14%']", "[' ',3,'21.43%']", "['ç',1,'7.14%']", "['a',3,'21.43%']", "[' ',3,'21.43%']", "['v',1,'7.14%']", "['a',3,'21.43%']", "[' ',3,'21.43%']", "['?',1,'7.14%']"]

list est un tableau à 1 dimension donc list[0], list[1] etc

list[ i][0] ou list[ i][2] ne correspondent pas a a grand chose (enfin si il sors le premier et le 3eme caractère de tes string.)

Qu'est-ce que tu cherche a afficher avec :
display += "* " + list[i][0] + " : " + list[i][2] + "\n"

?

Pour avoir :
a écrit :
[s,1,7.14%],[a,3,21.43%],[l,1,7.14%],[u,1,7.14%],[t,1,7.14%],[,,1,7.14%],[ ,3,21.43%],[ç,1,7.14%],[v,1,7.14%],[?,1,7.14%]

il faudrait plutôt un truc du genre :
display += list[i] + ","

Modifié par _laurent (17 Feb 2021 - 13:45)
_laurent a écrit :
Tu log ton résultat dans la console donc tu as pu voir qu'il était bien :

["['s',1,'7.14%']", "['a',3,'21.43%']", "['l',1,'7.14%']", "['u',1,'7.14%']", "['t',1,'7.14%']", "[',',1,'7.14%']", "[' ',3,'21.43%']", "['ç',1,'7.14%']", "['a',3,'21.43%']", "[' ',3,'21.43%']", "['v',1,'7.14%']", "['a',3,'21.43%']", "[' ',3,'21.43%']", "['?',1,'7.14%']"]
Eh bien oui, justement, ce n'est pas ça que je veux, je souhaite :

[['s',1,'7.14%'], ['a',3,'21.43%'], ['l',1,'7.14%'], ['u',1,'7.14%'], ['t',1,'7.14%'], [',',1,'7.14%'], [' ',3,'21.43%'], ['ç',1,'7.14%'], [' ',3,'21.43%'], ['v',1,'7.14%'], ['?',1,'7.14%']]
où ce sont des tableaux dans le tableau et où chaque caractère y est une seule fois. Mais je n'y arrive pas !!

Avec mon truc, je cherche à afficher :
* s : 7.14%
* a : 21.43%
* l : 7.14%
...

Mais je n'y arrive pas !! Smiley bawling Smiley bawling
Modérateur
Ah j'avais compris de travers !

Alors oui c'est au moment ou tu le construit :
list.push("['"

déjà rien que là tu peux voir que tu push un string avec [ dedans et non un array

Il faut plutot un truc du genre :
list.push([ text[i] , (text.split(text[i]).length - 1), (100 * ((text.split(text[i]).length - 1) / charactersNb)).toFixed(2) + "%"]);

Sans les guillemet sinon il prendra ca pour un string
Meilleure solution
_laurent a écrit :
Ah j'avais compris de travers !
Donc, que j'avais mal expliqué ! Smiley cligne


_laurent a écrit :
déjà rien que là tu peux voir que tu push un string avec [ dedans et non un array
Oui, j'ai un problème avec la concaténation (et aussi pour orthographier ce mot) ! Smiley sweatdrop

Merci beaucoup pour le code
list.push([text[i],(text.split(text[i]).length-1),(100*((text.split(text[i]).length-1)/charactersNb)).toFixed(2)+"%"]);
! D'ailleurs, il y avait une autre erreur quelque part, j'avais mis
list[j][1].includes(text[i])
au lieu de
list[j][0].includes(text[i])
! Smiley smash

Merci ! Smiley merci
Modifié par js_html (17 Feb 2021 - 20:00)
Superbe !
Si je mets du code avec l'élément i d'un tableau, dans colorisation, le forum me transforme en italique...
Modérateur
js_html a écrit :
Superbe !
Si je mets du code avec l'élément i d'un tableau, dans colorisation, le forum me transforme en italique...

Ouais un petit conflit... il faut le mettre dans une balise de code ou alors penser a rajouter un petit espace :
list[i]

list[ i]

ou utiliser n'importe quelle autre lettre (sauf "b") Smiley lol