En fait j'ai lu ton code un peu vite. Je n'ai rien trouvé à dire sur le splice car c'est la bonne méthode à utiliser ici. Mais en fait, il manque un paramètre !
1 2 3 4 5 6 7 8
| tab = ['a', 'b', 'c', 'd', 'e']
> Array [ "a", "b", "c", "d", "e" ]
tab.splice(2)
> Array [ "c", "d", "e" ]
tab
> Array [ "a", "b" ] |
Là tu brandis un couteau de boucher (un peu rouillé sur les bords) et tu tailles des tranches beaucoup trop grosses dans ton tableau. Du coup, les undefined s'expliquent facilement : le tableau est trop court et le random déborde.
En rajoutant la longueur à couper en second paramètre, les choses vont beaucoup mieux :
1 2 3 4 5 6 7 8
| tab = ['a', 'b', 'c', 'd', 'e']
> Array [ "a", "b", "c", "d", "e" ]
tab.splice(2, 1)
> Array [ "c" ]
tab
> Array [ "a", "b", "d", "e" ] |
Tu as également un problème d'intervalle avec ton random. La bonne formule est :
Math.floor(Math.random() * longueur)
Sinon l'indice 0, qui correspond à la plaque no 1, ne sort jamais.
Pour document.write, je n'insinue rien, je déclare en toute franchise. Cette technique est à éviter ; si tu as lu l'article de Bovino que j'ai mis en lien tout à l'heure, tu sais maintenant pourquoi.
C'est mieux effectivement d'utiliser le innerHTML d'un élément, et je peux te conseiller encore mieux : si le contenu que tu veux insérer est du texte pur, sans HTML, tu peux utiliser textContent (compatible IE9 ; il y a un équivalent pour les IE plus anciens qui s'appelle innerText).
En ce qui me concerne, ma méthode préférée est de créer un élément avec document.createElement, de lui ajouter du texte puis de l'insérer dans la page avec la méthode qui va bien : appendChild, insertBefore, etc. Tout ceci bien sûr en supposant que je n'utilise pas de framework comme jQuery.
En bonus, tu peux fournir à l'utilisateur une sortie texte facile à copier avec un <textarea readonly>, ce qui en plus a l'avantage, pour toi, de conserver les sauts de ligne sans avoir besoin de <br>. En JavaScript, les sauts de ligne s'écrivent '\n'.
Partager