Добавить пробел в строку, когда он включает слово в массив - PullRequest
0 голосов
/ 04 марта 2019

У меня есть функция, в которой я перебираю заданную строку, чередуя заглавные буквы каждого символа и конкатенируя его в переменную alt.

Для правильного прохождения этого цикла я удалил пробелы изоригинальная строка.Но мне нужно добавить их обратно в конец функции.

function alternatingCaps(str) { // 'hello world'
  let words = str.toLowerCase().split(' '); // ['hello','world']
  str       = words.join(''); // 'helloworld'
  let alt = '';
  for(let i = 0; i < str.length; i++) {
    if(i % 2 === 0)
      alt += str[i].toUpperCase();
    else
      alt += str[i].toLowerCase();
  }
  return alt;
} 

console.log(alternatingCaps('hello world'));
/* Output: "HeLlOwOrLd"
   Wanted output: "HeLlO wOrLd" */

Как только alt содержит строку, включенную в качестве значения в массив words, я хочу добавить пробел в концеслова.

Вот моя попытка:

 words.forEach(function(word) {
  if(alt.toLowerCase().includes(word) && word[word.length - 1] === alt[i].toLowerCase())
    alt += ' ';
});

Проверяется, присутствуют ли какие-либо слова из массива words в строке alt и является ли текущий символитерация строки соответствует последней букве в слове.Если это так, он добавляет пробел к строке.

Но это не работает должным образом.

> Output: "HeLlO wOr Ld"
> Wanted output: "HeLlO wOrLd"

Я также думаю, что это может вызвать проблемы с дублирующимися буквами.Как я могу достичь своей цели?

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Вы можете перебирать вашу строку по одному символу за раз.Затем проверьте, являются ли символы фактическим символом слова.Если это так, измените заглавные буквы, если нет, добавьте их в выходные данные, как они есть:

function altCaps(input) {
  var result = '';
  var cap = false;
  for (var i = 0; i < input.length; i++) {
    var c = input[i];
    result += /\w/.test(c) ? (cap = !cap) ? c.toUpperCase() : c.toLowerCase() : c;
  }
  return result;
}

ОБНОВЛЕНИЕ: Разборчивый код

function altCaps(input) {
  var result = '';
  var cap = false;
  for (var i = 0; i < input.length; i++) {
    var c = input[i];
    if (/\w/.test(c)) {               // check if char is a "word character" (i.e. letter)
      cap = !cap;                     // toggle next capitalization
      if (cap)                        // if it should capitalize
        result += c.toUpperCase();    // add uppercase letter
      else
        result +=  : c.toLowerCase(); // add lowercase letter
    } else {
      result += c;                    // no letter, so add character as is.
    }
  }
  return result;
}
0 голосов
/ 04 марта 2019

Ты не должен присоединяться к своим словам.Сохраните их как отдельные элементы в массиве слов, и вы сможете перебирать этот массив, применяя свою функцию к каждому элементу.

function alternatingCaps(str) { // 'hello world'
  let words = str.toLowerCase().split(' '); // ['hello','world']

  const alts = words.map(word => capitalizeEvens(word));
  return alts.join(' ');

  function capitalizeEvens(word) {
    let alt = '';
    for(let i = 0; i < word.length; i++) {
      if(i % 2 === 0)
        alt += word[i].toUpperCase();
      else
        alt += word[i].toLowerCase();
    }
    return alt;
  } 

console.log(alternatingCaps('hello world'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...