【问题标题】:Randomize uppercasing / lowercasing on all string characters对所有字符串字符随机大写/小写
【发布时间】:2015-02-20 04:09:45
【问题描述】:

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

var myString = "Hello I am randomly capitalized"

想要的函数结果:

hElLO i aM rAnDOmlY caPiTAlizED

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

【问题讨论】:

  • 请贴出您尝试过的代码。

标签: javascript random dom-manipulation css


【解决方案1】:

这是一种方法

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. 使用Array.map 函数。这需要一个回调函数,该函数应用于数组中的每个项目,并返回一个新的结果数组,其中每个值都由 map 函数返回。
  3. 地图功能内部
    1. Math.round(Math.random()) 用于随机性
    2. 结果与三元运算符一起使用以获得toLowerCasetoUpperCase Math.Round(Math.random())?'toLowerCase':'toUpperCase'
    3. 三元运算符的结果用于通过字符的数组延迟访问相关的函数属性,然后调用。 c[<ternary here>]()
  4. 最后,它对map 函数调用的结果使用Array.join 方法将结果数组连接回字符串。

代码高尔夫(效率)

RobG 的答案比我的更有效(请为他的答案投票)

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

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

【讨论】:

  • 太棒了。让我试一试。谢谢!
  • 嗯——这对于打代码高尔夫来说会很有趣!
  • 你可以使用.5&gt;而不是Math.round,这样可以减少输入和函数调用。
  • 工作得很好,伙计。非常感谢。在这个功能中有很多东西需要学习。
  • 不客气。我将编辑并添加它对您的工作方式的细分:)
【解决方案2】:

嗯,根据乔尔的回答……

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

【讨论】:

    猜你喜欢
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    相关资源
    最近更新 更多