Что не так с логикой моей функции изменения символов?

#javascript

#javascript

Вопрос:

Я попытался создать функцию изменения символов для строк, она предполагает изменение всех «-» на «_», и она делает это только для первого символа и оставляет остальные. Если бы кто-нибудь мог объяснить, это было бы ужасно.

 function kebabToSnake(str) {
    var idNum = str.length;
    for(var i = 0; i <= idNum; i  ) {
        var nStr = str.replace("-", "_");
    }
    return nStr;
}
  

Ответ №1:

 var nStr = str.replace("-", "_");
  

Итак, на каждой итерации вы заменяете первый найденный - символ в исходной строке, а не строку, из которой вы уже заменили символы. Вы можете либо вызвать .replace только одну переменную, которую вы переназначаете:

 function kebabToSnake(str) {
    var idNum = str.length;
    for(var i = 0; i < idNum; i  ) {
        str = str.replace("-", "_");
    }
    return str;
}
console.log(kebabToSnake('ab-cd-ef'));  

(обратите внимание, что вы должны выполнять итерацию от 0 к str.length - 1 , а не от 0 к str.length )

Или, что гораздо, гораздо более элегантно, используйте глобальное регулярное выражение:

 function kebabToSnake(str) {
  return str.replace(/-/g, '_');
}
console.log(kebabToSnake('ab-cd-ef'));  

Комментарии:

1. Спасибо, теперь я вижу, что я напутал.