Вернуть строку, где элементы с четными индексами будут переведены в верхний регистр

309
12 июня 2017, 23:52

Привет всем,

Суть задачи: написать функцию которая принимает в параметры строку, и возвращает её, где всё элементы с четными индексами переведены в верхний регистр.

Например:

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

Вот не могу понять как теперь, собрать обратно всё в одну сроку. Кто может ткните носом меня, в сторону правильного решения :)

Answer 1

Вот решение вопроса без прохождения по двум циклам.

    <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 если задать параметр пустую строку то он разрезает строку по символам, вот проходим по нему каждый четный символ переводим в верхний регистр, но не считаем прабелы.

Answer 2

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

Answer 3

зачем так громоздить?
вот вариант на регулярках. правда немного растянуто, но что бы понятно было спец. так сделал.

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

READ ALSO
Как обратиться к переменной с id в имени? JS

Как обратиться к переменной с id в имени? JS

Здравствуйте, есть такой код:

293
Как получить метку времени (UNIX timestamp)?

Как получить метку времени (UNIX timestamp)?

Как можно получить метку времени в JS?

342
Как связать событие DOM-элемента и объект JavaScript?

Как связать событие DOM-элемента и объект JavaScript?

Простой пример, я кликаю на некий блок на веб-странице и мне нужно, чтобы объект JS, не связанный с этим DOM-элементом (не BOM этого элемента), понял,...

415
Сдвиг значений в массиве, splice

Сдвиг значений в массиве, splice

Доброго времени суток, код будущего морского боя

262