2014-07-01 76 views
2

我正試圖洗牌。我想先用各自的字母先洗牌。目前這是洗牌首先與第二個字母..分詞和混洗/混亂字母

我想分裂詞& shuffle「sFtir Seocdn」。

String.prototype.shuffle = function() { 
    var a = this.split(""), 
     n = a.length; 

    for (var i = n - 1; i > 0; i--) { 
     var j = Math.floor(Math.random() * (i + 1)); 
     var tmp = a[i]; 
     a[i] = a[j]; 
     a[j] = tmp; 
    } 
    return a.join(""); 
} 


alert("First Second".shuffle()); 

我試着拆分下面的代碼,但它然後只拆分&洗牌單詞而不是字母。

var a = this.split(" "), 
return a.join(" "); 

的jsfiddle鏈接:http://jsfiddle.net/9L8rs/1/ PLS建議我應該怎麼辦。

+0

你需要呼籲各個單詞洗牌...... – Ian

+2

有一個空格,然後通過這些結果循環,拆配'string.split首先拆分(「」 )'。然後做你的洗牌和加入 – bottens

+1

除了VisioN的回答,這裏有一個解決方案,把'shuffle'放在裏面(所以使用'shuffle'的代碼不必擔心單詞):http://jsfiddle.net/7hjg4 /。但我想這取決於你如何期待使用這個 – Ian

回答

2

嘗試拆分輸入字符串第一:

String.prototype.shuffle = function() { 
    return this.split(" ").map(function(word, i) { 
     var a = word.split(""), 
      n = a.length; 

     for (var i = n - 1; i > 0; i--) { 
      var j = Math.floor(Math.random() * (i + 1)); 
      var tmp = a[i]; 
      a[i] = a[j]; 
      a[j] = tmp; 
     } 

     return a.join(""); 
    }).join(" "); 
} 

alert("First Second".shuffle()); 

Updated JSFiddle

+1

我並沒有讓你失望,但我希望有人不喜歡你的''forEach''使用'map'方法。 – VisioN

+1

感謝@VisioN,我更新了代碼,使它更加'mappy':) – reaxis

6

就分割字符串成字,並分別在洗牌的話字母:

"First Second".split(' ').map(function(w) { return w.shuffle(); }).join(' '); 

這裏.split.mappolyfill可以適用於舊的瀏覽器)方法可以提供幫助。

DEMO:http://jsfiddle.net/9L8rs/2/

1

我只是增加了一個功能shuffleWords是分裂的話,並呼籲在你的每一個隨機播放功能他們。恩。 a[i] = a[i].shuffle();

String.prototype.shuffleWords = function() { 
    var a = this.split(" "), 
     n = a.length; 

    for (var i = 0; i < n; i++) { 
     a[i] = a[i].shuffle(); 
    } 
    return a.join(" "); 
} 

看到更新後的jsfiddle