Вот один из способов
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
функция используется. Это принимает функцию обратного вызова, которая применяется к каждому элементу в массиве, и возвращает новый результирующий массив с каждым значением, возвращаемым функцией карты.
- Внутри функции карты
Math.round(Math.random())
используется для хаотичности
- Результат, который используется с тройным оператором, чтобы получить
toLowerCase
или toUpperCase
Math.Round(Math.random())?'toLowerCase':'toUpperCase'
- В результате тройного оператора используется для доступа к соответствующее свойство функции путем отсрочки массива символа, а затем вызванного.
c[<ternary here>]()
- Наконец он использует метод
Array.join
по результату вызова в map
функции, чтобы присоединиться результирующий массив обратно в строку.
код гольф (КПД)
ответ RobG имеет более эффективный подход, чем мой (пожалуйста upvote свой ответ)
String.prototype.toRandomCase = function() {
return this.toLowerCase().split('').map(function(c){
return Math.random() < .5? c : c.toUpperCase();
}).join('');
}
Если у кого есть предложения по улучшению этого дальше - пожалуйста, комментарий или редактировать эта часть ответа
Пожалуйста, разместите код, который вы пробовали. – j08691