【问题标题】:Split words & shuffle / jumble letters拆分单词和随机播放/混乱的字母
【发布时间】:2014-08-22 03:40:51
【问题描述】:

我正在尝试改组单词。我想先用其各自的字母来洗牌。目前它正在将 First 与 Second 字母混合在一起..

我想拆分单词并随机播放“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/ 请建议我该怎么做。

【问题讨论】:

  • 您需要对单个单词调用 shuffle...
  • 首先用空格分割,然后循环遍历这些结果,并用string.split('')分割。然后洗牌并加入
  • 除了 VisioN 的回答之外,还有一个解决方案,将所有内容都保存在 shuffle 中(因此使用 shuffle 的代码不必担心文字):jsfiddle.net/7hjg4。但我想这取决于你期望如何使用它

标签: javascript jquery random split shuffle


【解决方案1】:

只需将字符串拆分为单词并分别将单词中的字母打乱:

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

这里.split.mappolyfill可能适用于旧浏览器)方法可以提供帮助。

演示: http://jsfiddle.net/9L8rs/2/

【讨论】:

    【解决方案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

    【讨论】:

    • 我没有对你投反对票,但我希望有人不喜欢你的 forEach-like 使用 map 方法。
    • 感谢@VisioN,我更新了代码以使其更“映射”:)
    【解决方案3】:

    我刚刚添加了一个函数 shuffleWords,它可以拆分单词并在每个单词上调用你的 shuffle 函数。前任。 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

    【讨论】:

      猜你喜欢
      • 2017-07-10
      • 1970-01-01
      • 1970-01-01
      • 2023-01-17
      • 2017-10-25
      • 2011-07-06
      • 2017-04-11
      • 1970-01-01
      • 2013-04-12
      相关资源
      最近更新 更多