Как добавить разделительный слеш в середину строки

Рейтинг: 0Ответов: 2Опубликовано: 10.01.2023

У меня есть массив строк:

['S', 'H', 'I', 'B', 'U', 'S', 'D', 'T']

Я уже разбил строку на отдельные буквы. Как мне перед "U" вставить разделительный слеш '/'? Ну и потом склеить каждую букву в слово?

      allSymbols.map((currentLetter) => {
     let splitString = currentLetter.split('')

Ответы

▲ 1Принят

Если продолжать использовать ваш способ, то можно так:

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 по стандарту выбирает , как символ для объединения элементов массива.

▲ 1

Если необходимо добавить разделитель в середину строки используя методы .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))