Дано предложение. Найти слова, содержащие буквы в верхнем регистре. В этих словах заменить маленький буквы на большие, а большие на маленькие

Дано предложение. Найти слова, содержащие буквы в верхнем регистре.

В этих словах заменить маленький буквы на большие, а большие на маленькие.

Например: "this iS a TeSt sTring ЩЭ" Обращаю внимание, что нужно заменить буквы только в тех словах, которые содержат большую букву

Есть код который выполняет это задание, но меняет буквы во всех словах

function flipCase(str) {
    var chars = str.toUpperCase().split("");
    for (var i = 0; i < chars.length; i++) {
      if (chars[i] == str[i])
        chars[i] = chars[i].toLowerCase();
    }
    return chars.join("");
  }
  
  var letters = "this iS a TeSt sTring ЩЭ";
  var result = flipCase(letters);
  console.log(letters);
  console.log(result);

Можно переделать его, можно написать новый код, например

var string = "this iS a TeSt sTring ЩЭ"
for (i = 0; i < string.length; i++)

Перебрать все элементы массива, а вот дальше не знаю как писать...


Ответы (1 шт):

Автор решения: Theodore
let before = "this iS a TeSt sTring ЩЭ";
let after = "";

let foo = before.split(" ");
for(let i = 0; i < foo.length; i++)
{
    if(foo[i] != foo[i].toLowerCase())
    {
        let bar = foo[i].toUpperCase();
        
        let str = "";
        for(let j = 0; j < foo[i].length; j++)
        {
            if(foo[i].charAt(j) == bar.charAt(j)) str += foo[i].charAt(j).toLowerCase();
            else str += foo[i].charAt(j).toUpperCase();
        }
        
        after += str + " ";
    }
    else after += foo[i] + " ";
}

alert(before + "\n" + after);
→ Ссылка