Дмитрий
Знаток
(429)
1 год назад
Вот решение:
function wave(str) {
const resultArr = [];
for (let i = 0; i < str.length; i++) {
if (str[i] == " ") {
continue;
} else {
let resultStr = str.slice().split("");
resultStr.splice(i, 1, String(resultStr[i].toUpperCase()));
resultArr.push(resultStr.join(""));
}
}
return resultArr;
}
Итоговую строку лучше задавать там, где она используется.
Проблема с циркуляром возникала, потому что в resultArr добавлялся сам resultArr.
splice - это деструктивный метод, он изменяет исходный массив, но главное - он возвращает то, что он вырезал из массива, т.е. 1 элемент массива, начиная с i.
при resultStr = str.splice(...) в resultStr записывается буква.
VIktorУченик (55)
1 год назад
ага,спасибо большое, а зачем тут slice не могу понять едиственное
let resultStr = str.slice().split("");
ДмитрийЗнаток (429)
1 год назад
наверное, уже привычка делать копии с помощью .slice(), чтобы никак не взаимодействовать с пришедшим str, есть привило при работе с функциями, не мутировать пришедшие параметры, чтобы случайно не изменить их там, откуда они пришли.
1. The input string will always be lower case but maybe empty.
2. If the character in the string is whitespace then pass over it as if it was an empty seat
Example
wave("hello") => ["Hello", "hEllo", "heLlo", "helLo", "hellO"]