有点奇怪的要求,我知道。但是我一直在寻找解决这个问题的方法已经有一段时间了。这是我正在寻找的效果:
var myString = "Hello I am randomly capitalized"
期望的函数结果:
hElLO i aM rAnDOmlY caPiTAlizED
我想这最好以一种或另一种方式使用 javascript 数组来完成。只是在寻找一些创意。谢谢你!
最佳答案
这是一种方式
myString.split('').map(function(c){
return c[Math.round(Math.random())?'toUpperCase':'toLowerCase']();
}).join('');
如果需要,您可以将其作为原型(prototype)方法添加到字符串对象上以便于访问:
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 函数返回。 - 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('');
}
如果有人有进一步改进的建议 - 请评论或编辑答案的这一部分
关于javascript - 随机化所有字符串字符的大写/小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27596270/