簡體   English   中英

在javascript中打亂一個詞

[英]Scrambling a word in 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>

錯誤似乎與您拼接字符串的方式有關。 您需要指定應刪除多少個元素。 我把你的代碼打亂了一點,把它放在更多的控制台日志中,它看起來像這樣:

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' }

如果您編寫CorrectAwnser.splice(2) ,它將刪除 2 個元素,而不是第二個元素。 這就是為什么您的拼接刪除了多個元素,並且有時在循環結束之前CorrectAwnser變為空的原因。

你應該寫

CorrectAwnser.splice(RandomLetter, 1)

您可以使用String.prototype方法,因為它將返回一個字符串數組(很酷,不需要生成一個!)。 同樣要隨機化字符串字符,您可以以特定方式使用Math.random函數......

見 =>

String.prototype.randomize = function() {
  let array = Array.from(this).map((val, index) => this[index]);
  array.sort(() =>  0.5 - Math.random());
  const string = array.reduce((string, word)  =>  string += word, "");
  return string;
};

let str = "Overflow";
str = str.randomize();
console.log(str);

你可以在任何字符串數據類型上使用這個方法..所以我認為你現在可以處理它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM