1

我正在制作简单的游戏,计划使用 Fisher-Yates Shuffle 来打乱单词。

如何用字符串的每个字母填充数组?在算法完成后,我如何用加扰的单词填充字符串?

对于第二部分,我可以想象它只是循环遍历数组并将当前数组位置内容添加到字符串中,但不确定代码会是什么样子。

我对javascript不是很有经验,如果这是一个广泛的问题,我可以理解。

4

3 回答 3

4

您可以使用:

var str = "A long string here...",
var lettersArray = str.split(''); //["A", " ", "l", "o", "n", "g", " ", "s", "t", "r", "i", "n", "g", " ", "h", "e", "r", "e", ".", ".", "."]
//Doing some stuff here...
var scramble = lettersArray.join('')); //"A long string here..."
于 2013-04-24T18:05:42.070 回答
2

//使用Fisher-Yates:

function scrambleWord(word){
    var A= word.split(''),
    i, temp, L= A.length;
    while(--L){
        i= Math.floor(Math.random()*L);
        temp= A[i];
        A[i]= A[L];
        A[L]= temp;
    }
    return A.join('');
}

var alpha= 'supercalifragelisticexpialadocious';
scrambleWord(alpha);

/*  returned value: (String)
xgitellpcuecpuraaiasrideloiasfscio
*/
于 2013-04-24T18:20:52.370 回答
0

这可以通过使用String.splitArray.join

简单地实现 请参阅 js fiddle

上的示例 此代码会将字符串拆分为一个数组,然后将数组内容返回为一个字符串,其中字符按原始顺序排列。

var string = "hocus pocus",
    array = string.split(""),
    newString = array.join("");

alert(newString);

在 ECMAScript6 (Harmony) 中,还有一个名为String.toArray的新方法

我不相信任何当前的浏览器都支持它。

已经为此提供了一个shim,因此您可以根据需要立即开始使用此语法。

只是对即将推出的功能的有趣说明。

于 2013-04-24T18:11:52.710 回答