随机化所有字符串字符的大写/小写

时间:2014-12-22 03:37:59

标签: javascript random dom-manipulation css

有点奇怪的要求,我知道。但是我现在已经有很长一段时间一直在寻找解决方案了。这就是我正在寻找的效果:

var myString = "Hello I am randomly capitalized"

期望的功能结果:

hElLO i aM rAnDOmlY caPiTAlizED

我想这最好用javascript数组以这种或那种方式完成。只是寻找一些创意。谢谢!

2 个答案:

答案 0 :(得分:7)

这是一种方式

myString.split('').map(function(c){
    return c[Math.round(Math.random())?'toUpperCase':'toLowerCase']();
}).join('');

您可以将此作为原型方法添加到字符串对象上,以便在需要时轻松访问:

String.prototype.toRandomCase = function() {
    return this.split('').map(function(c){
        return c[Math.round(Math.random())?'toUpperCase':'toLowerCase']();
    }).join('');
}

然后通过

访问
console.log(myString.toRandomCase());

对其工作原理的一些解释:

  1. String.split方法用于将字符串拆分为单个字符数组。
  2. 使用了
  3. Array.map函数。这将采用一个回调函数,该函数应用于数组中的每个项目,并返回一个新的结果数组,其中包含map函数返回的每个值。
  4. 在地图功能中
    1. Math.round(Math.random())用于随机性
    2. 该结果与三元运算符一起用于获取toLowerCasetoUpperCase Math.Round(Math.random())?'toLowerCase':'toUpperCase'
    3. 三元运算符的结果用于通过字符的数组引用访问相关的函数属性,然后调用。 c[<ternary here>]()
  5. 最后,它使用Array.join方法对map函数调用的结果将结果数组连接回字符串。
  6. 代码高尔夫(效率)

    RobG的回答比我的回答更有效(请回答他的回答)

    String.prototype.toRandomCase = function() {
        return this.toLowerCase().split('').map(function(c){
            return Math.random() < .5? c : c.toUpperCase();
        }).join('');
    }
    

    如果有人有进一步改进的建议 - 请评论或编辑答案的这一部分

答案 1 :(得分:4)

嗯,基于乔尔的答案......

myString.toLowerCase().split('').map(function(c){
    return Math.random() < .5? c : c.toUpperCase();
}).join('');