有点奇怪的要求,我知道。但是我现在已经有很长一段时间一直在寻找解决方案了。这就是我正在寻找的效果:
var myString = "Hello I am randomly capitalized"
期望的功能结果:
hElLO i aM rAnDOmlY caPiTAlizED
我想这最好用javascript数组以这种或那种方式完成。只是寻找一些创意。谢谢!
答案 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());
String.split
方法用于将字符串拆分为单个字符数组。Array.map
函数。这将采用一个回调函数,该函数应用于数组中的每个项目,并返回一个新的结果数组,其中包含map函数返回的每个值。Math.round(Math.random())
用于随机性toLowerCase
或toUpperCase
Math.Round(Math.random())?'toLowerCase':'toUpperCase'
c[<ternary here>]()
Array.join
方法对map
函数调用的结果将结果数组连接回字符串。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('');