Как добавить разделительный слеш в середину строки
У меня есть массив строк:
['S', 'H', 'I', 'B', 'U', 'S', 'D', 'T']
Я уже разбил строку на отдельные буквы. Как мне перед "U" вставить разделительный слеш '/'? Ну и потом склеить каждую букву в слово?
allSymbols.map((currentLetter) => {
let splitString = currentLetter.split('')
Ответы (2 шт):
Если продолжать использовать ваш способ, то можно так:
let chars = ['S', 'H', 'I', 'B', 'U', 'S', 'D', 'T']
chars = chars.map(e => e === 'U' ? '/U' : e)
console.log(chars)
Объяснение
Проходимся по массиву символов, если символ равен U, тогда вместо него возвращаем /U, а если это не так, то возвращаем тот же символ.
Можно ещё так:
let chars = ['S', 'H', 'I', 'B', 'U', 'S', 'D', 'T']
chars = chars.map(e => e.replace(/U/, '/U'))
console.log(chars)
Объяснение
Также проходимся по всему массиву символов, заменяем символ U на /U, если такой есть.
Или через цикл for:
let chars = ['S', 'H', 'I', 'B', 'U', 'S', 'D', 'T']
for (let i = 0; i < chars.length; i++) {
let char = chars[i]
if(char === 'U') {
chars[i] = '/U'
}
}
console.log(chars)
Объяснение
Проходимся по массиву, если символ равен U, то тогда в массиве заменяем элемент на /U. Заметьте, я меняю именно сам элемент массива, а не переменную char, т.к. char временная и сохраняется только в цикле, а вот если заменять элемент массива, тогда сама изменённая строка в массиве сохранится.
Каждый из массивов которые мы изменили можно соединить в одну строку методом join, вот так:
let chars = ['S', 'H', 'I', 'B', 'U', 'S', 'D', 'T']
chars = chars.map(e => e === 'U' ? '/U' : e)
console.log(chars.join(''))
Уточнение
В методе join, я указываю пустую строку для того, чтобы массив объединился без лишних символом, т.к. если ничего не указывать в аргументы, то join по стандарту выбирает , как символ для объединения элементов массива.
Если необходимо добавить разделитель в середину строки используя методы .split() и .join(), то можно сделать следующим образом:
const str1 = 'asdfghjk';
const str2 = 'asdfghjkl';
function addSep(str) {
const s = str.split('');
const avg = Math.round((str.length - 1) / 2);
s[avg] = '/' + s[avg];
return s.join('');
}
console.log(addSep(str1))
console.log(addSep(str2))
Если же переводить строку в массив для каких либо других целей нет смысла, то можно воспользоваться методом .slice()
const str1 = 'asdfghjk';
const str2 = 'asdfghjkl';
function repStr(str) {
const avg = Math.round((str.length - 1) / 2);
return str.slice(0, avg) + '/' + str.slice(avg)
}
console.log(repStr(str1))
console.log(repStr(str2))