[英]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.