2013-04-24 39 views
-5

我试图实现Fisher–Yates shuffle,但是当我用一个警报测试下面的代码时,它似乎没有循环。我想,它会在第一次后停止。实现一个Fisher-Yates随机循环不起作用

function scrambleWord() { 
    var letterArray = currentWord.split(""); 
    var m = letterArray.length, t, i; 
    while (m) { 
     x = Math.floor(Math.random() * m--); 
     t = letterArray[m]; 
     letterArray[m] = array[i]; 
     array[i] = t; 
    } 
    scrambledWord = letterArray.join(""); 
} 

回答

0

arrayicurrentWord从来没有在任何地方定义:

function shuffleWord(word) { 
    var array = word.split(''); 
    var m = array.length, t, i; 

    // While there remain elements to shuffle… 
    while (m) { 

    // Pick a remaining element... 
    i = Math.floor(Math.random() * m--); 

    // And swap it with the current element. 
    t = array[m]; 
    array[m] = array[i]; 
    array[i] = t; 
    } 

    return array.join(''); 
} 
+0

的currentWord定义,但这个功能不是内部,而是在它之外。对不起,我没有说清楚。我在这里定义“var m = letterArray.length,t,i;”而不是数组刚刚创建的文字方式? – user2316675 2013-04-24 20:13:21

+0

@ user2316675:定义了'i',但没有给出任何值。你是什​​么意思?*创建文字方式*?来自w3schools的 – Blender 2013-04-24 20:14:36

+0

:Literal:var myCars = [“Saab”,“Volvo”,“BMW”];但在上面的代码中填充字符串currentWord – user2316675 2013-04-24 20:17:03

0

因为您还没有定义currentWordarray

疑难解答从浏览器的开发者控制台开始。