2014-07-01 57 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