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

标签 javascript random dom-manipulation css

有点奇怪的要求,我知道。但是我一直在寻找解决这个问题的方法已经有一段时间了。这是我正在寻找的效果:

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());

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

  1. String.split方法用于将字符串拆分为单个字符的数组。
  2. Array.map功能被使用。这需要一个应用于数组中每个元素的回调函数,并返回一个新的结果数组,其中每个值由 map 函数返回。
  3. map 功能内部
    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('');
}

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

关于javascript - 随机化所有字符串字符的大写/小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27596270/

相关文章:

javascript - 如何在 React Native 中点击移动图片

javascript - JavaScript 中的自定义事件与简单地调用常规函数有何不同?

javascript - 是否可以删除一行取决于 AngularJs ui 网格中的特定值?

javascript - 获取 chrome 扩展中的所有链接

google-app-engine - 为什么我的随机数没有更新?

python - random.shuffle 随机性

javascript - openTip javascript 通过 closeButton 和超时隐藏

scala - 在 Scala 中获取随机元素的有效方法?

jquery - 如何更改选定元素的多个实例的位置

javascript - jQuery 对象和循环的问题