Преобразовать строку согласно регистрам
Задача такая. Получаем строку 'nameSname' => 'name-s-name'. Я получаю строку - ищу символ большого регистра, делаю действия:
- Большую букву - делаю её маленькой
- Перед символом ставлю "-"
- После символе ставлю "-"
let strReform = 'camelsHaveThreeHumps'
let splitStrReform = strReform.split('')
const arr = []
const finalHubps = arr.map((arr, i) => {
if (arr === arr.toUpperCase()) {
arr.toLowerCase()
arr[i + 1] === '-'
arr[i - 1] === '-'
}
})
console.log(finalHubps)
Спасибо заранее.
Ответы (2 шт):
let strReform = 'camelsHaveThreeHumps';
const arr = strReform.split('');
const finalHubps = arr.map(a => a == a.toUpperCase() ? `-${a.toLowerCase()}-` : a);
console.log(finalHubps.join(''));
Основная проблема в именах переменных. Из-за одинаковых имен, происходит путаница, где просто строка, а где массив строк.
Следующая проблема: все методы строк не изменяют исходную строку, а возвращают новую, поэтому нужно куда-то присваивать результат вызова, или использовать его в каком либо выражении.
И наконец, метод .map ставит в соответствие каждому элементу одного массива, элемент из другого. Новый элемент должен возвращаться из переданного callback, но сейчас ничего не возвращается.
Кроме того, нужно не забыть собрать полученный массив обратно в строку с помощью метода .join
Если все исправить, можно получить следующее:
let strReform = 'camelsHaveThreeHumps'
let splitStrReform = strReform.split('')
const finalHubps = splitStrReform.map((str, i) => {
if (str === str.toUpperCase()) {
return '-' + str.toLowerCase() + '-';
}
return str;
}).join('');
console.log(finalHubps)
Альтернативным решением может стать использование регулярного выражения, в методе .replace
let strReform = 'camelsHaveThreeHumps'
const finalHubps = strReform.replace(/[A-Z]/g, _ => `-${_.toLowerCase()}-`);
console.log(finalHubps)