Привет всем,
Суть задачи: написать функцию которая принимает в параметры строку, и возвращает её, где всё элементы с четными индексами переведены в верхний регистр.
Например:
toWeirdCase( "Weird string case" );//=> returns "WeIrD StRiNg CaSe"
function toWeirdCase(s){
var str = s.toLowerCase().split(' '); // Переводим строку в нижний регистр, и разбиваем на массив.
for(var i = 0; i < str.length; i++){ // проходимся циклом по этим массивам
var s = str[i].split('').forEach(function (item, j/*индекс текущего элемента*/) { // разбиваем уже сложенные элементы на массивы, и попутно делаем проверку на четность индекса
if (j % 2 === 0){
item.toUpperCase(); // переводим элемент с четным индексом в верхний регистр
//console.log(item.toUpperCase()); // так выводит всё четные элемент в верхнем регистре.
}
});
console.log(s);
}
}
console.log(toWeirdCase("Weird string case"));
Вот не могу понять как теперь, собрать обратно всё в одну сроку. Кто может ткните носом меня, в сторону правильного решения :)
Вот решение вопроса без прохождения по двум циклам.
<script>
function toWeirdCase(s){
var str = s.toLowerCase().split(''); // Переводим строку в нижний регистр, и разбиваем на массив.
var j = 0;
for(var i = 0; i < str.length; i++){ // проходимся циклом по этим массивам
if(str[i] == ' '){
j = 0;
continue;
}
else{
if (j % 2 == 0){
str[i] = str[i].toUpperCase(); // переводим элемент с четным индексом в верхний регистр
}
j++;
}
}
return str.join('');
}
console.log(toWeirdCase("Weird string case"));
</script>
В функции split
если задать параметр пустую строку то он разрезает строку по символам, вот проходим по нему каждый четный символ переводим в верхний регистр, но не считаем прабелы.
function toWeirdCase(s) {
var str = s.toLowerCase().split(' ');
var result = '';
for (var i = 0; i < str.length; i++) {
for (var j = 0; j < str[i].length; j++) {
if (j % 2 === 0) {
result += str[i][j].toUpperCase();
} else {
result += str[i][j];
}
}
result += ' ';
}
return result;
}
console.log(toWeirdCase("Weird string case"));
зачем так громоздить?
вот вариант на регулярках. правда немного растянуто, но что бы понятно было спец. так сделал.
function replacer(str, $1, $2, offset, s) {
return $2.replace(/(.)(.)/gi, uper) + ' '; // ищем четное и нечетное и кидаем в uper
}
function uper (str, $1, $2, offset, s) {
return $1.toUpperCase()+$2; // берем первый символ делаем, большим плюсуем второй
}
const str = 'Lorem ipsum dolor sit amet';
console.log(str.replace(/(^|\s*)(\w*)(^|\s*)/g, replacer)) // ищем слова и кидаем найденое в функцию replacer
Виртуальный выделенный сервер (VDS) становится отличным выбором
Простой пример, я кликаю на некий блок на веб-странице и мне нужно, чтобы объект JS, не связанный с этим DOM-элементом (не BOM этого элемента), понял,...