首页 > 解决方案 > 在javascript中打乱一个单词

问题描述

我想制作一个打乱单词的系统,例如:Hello-> llHoe。问题是它有时会显示undefined在控制台中,我找不到任何问题。

这是我制作的代码:

function GenerateWord() {
    var Words = ["Hello", "Bye", "Tree"]
    var RandomNumber = Math.floor((Math.random() * Words.length));
    var CorrectAwnserString = Words[RandomNumber];
    var CorrectAwnser = CorrectAwnserString.split("");
    var WordToOrder = "";

    for(i = CorrectAwnser.length; i > 0;) {
        let RandomLetter = Math.floor((Math.random() * i));
        WordToOrder = WordToOrder + CorrectAwnser[RandomLetter];
        console.log(WordToOrder)
        CorrectAwnser.splice(RandomLetter);
        console.log(CorrectAwnser)
        i = i - 1;
    }

    document.getElementById("OriginalWord").innerHTML = CorrectAwnserString;
    document.getElementById("MessedWord").innerHTML = WordToOrder;
}
GenerateWord();
<div id="OriginalWord"></div>
<div id="MessedWord"></div>

标签: javascriptstring

解决方案


错误似乎与您拼接字符串的方式有关。您需要指定应该删除多少元素。我将您的代码改组了一点,并将其卡在更多控制台日志中,如下所示:

for(i = CorrectAwnser.length; i > 0;) {
    let RandomLetter = Math.floor((Math.random() * i));
    WordToOrder = WordToOrder + CorrectAwnser[RandomLetter];
    console.log(CorrectAwnser,RandomLetter,CorrectAwnser[RandomLetter]);
    console.log(WordToOrder)
    CorrectAwnser.splice(RandomLetter); // should be CorrectAwnser.splice(RandomLetter, 1); 
    i = i - 1;
}
console.log({CorrectAwnserString,WordToOrder});

上面的代码给出了以下结果:

[ 'T', 'r', 'e', 'e' ] 1 r
r
[ 'T' ] 0 T
rT
[] 0 undefined
rTundefined
[] 0 undefined
{ CorrectAwnserString: 'Tree', WordToOrder: 'rTundefinedundefined' }

将 splice 语句更新到CorrectAwnser.splice(RandomLetter, 1);日志后如下:

[ 'T', 'r', 'e', 'e' ] 3 e
e
[ 'T', 'r', 'e' ] 0 T
eT
[ 'r', 'e' ] 0 r
eTr
[ 'e' ] 0 e
eTre
{ CorrectAwnserString: 'Tree', WordToOrder: 'eTre' }

推荐阅读