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

toa*_*oad 3 javascript css random dom-manipulation

我知道,有点奇怪的要求.但是我一直在寻找解决方案.这是我正在寻找的效果:

var myString = "Hello I am randomly capitalized"
Run Code Online (Sandbox Code Playgroud)

期望的功能结果:

hElLO i aM rAnDOmlY caPiTAlizED
Run Code Online (Sandbox Code Playgroud)

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

Joe*_*Cox 7

这是一种方式

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

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

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

然后访问

console.log(myString.toRandomCase());
Run Code Online (Sandbox Code Playgroud)

这是如何工作的一些解释:

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

代码高尔夫(效率)

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

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

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

  • 别客气.我将编辑并添加它如何为您工作的细分:) (2认同)

Rob*_*obG 5

好吧,基于 Joel 的回答\xe2\x80\xa6

\n\n
myString.toLowerCase().split('').map(function(c){\n    return Math.random() < .5? c : c.toUpperCase();\n}).join('');\n
Run Code Online (Sandbox Code Playgroud)\n