Как заменить каждые три символа в массиве?

подскажите, пожалуйста, стоит такая задача, заменить каждое пятое слово в предложении словом BUZZ(это у меня вроде как получилось),а так же заменить каждую третью букву в в каждом слове, словом FIZZ(вот тут задача). Пробовал и через регулярные выражения, но ничего не могу сделать с пробелами, слово FIZZ заменяет так же и пробелы в предложении,сделал проверку на пробелы,но все равно каждую третью букву не могу получить. Буду рад любому совету.

const text = "Привет иногда бывает грустно но не всегда конечно".toLowerCase();

class FizzBuzzDetector {
  constructor(article) {
    this.article = article;
  }

  getOverlappings() {
    //Converting to an symbol array
    let convertToSymbolArray = this.article.split("");

    // вот тут проблема

    for (let i = 3-1; i < convertToSymbolArray.length - 1; i += 3) {
      if (convertToSymbolArray[i] == " ") {
        convertToSymbolArray[i] = " ";
      } else {
        convertToSymbolArray[i] = "FIZZ";
      }
    }
    //
    //Converting to string
    let convertToString = convertToSymbolArray.join("");

    //Converting to word array
    let convertToWordArray = convertToString.split(" ");

    for (let i = 5 - 1; i < convertToWordArray.length - 1; i += 5) {
      convertToWordArray[i] = "BUZZ";
    }
    return convertToWordArray.join(" ");
  }
}

const filterArticle = new FizzBuzzDetector(text);

console.log(filterArticle.getOverlappings());

Хочу получить вот такой результат:

прFIZZвеFIZZ инFIZZгдFIZZ быFIZZаеFIZZ грFIZZстFIZZо BUZZ не всFIZZгдFIZZ коFIZZечFIZZо


Ответы (1 шт):

Автор решения: Grundy

Основная проблема кода в вопросе в том, что замена буквы и слова разделены между собой.

Однако их можно объединить в один проход:

  1. разбить строку по словам
  2. каждое пятое заменить на BUZZ
  3. остальным пройтись по буквам
  4. каждую третью заменить на FIZZ

const text = "Привет иногда бывает грустно но не всегда конечно".toLowerCase();

class FizzBuzzDetector {
  constructor(article) {
    this.article = article;
  }

  getOverlappings() {
    //Converting to word array
    let convertToWordArray = this.article.split(" ");

    for (let i = 0; i < convertToWordArray.length; i++) { // идем по словам
      if (i > 0 && i % 4 === 0) { // каждое пятое заменяем 
        convertToWordArray[i] = "BUZZ";
        continue; // переходим к следующей итерации
      }
      var convertToSymbolArray = convertToWordArray[i].split(''); // разбиваем на символы
      for (let i = 2; i < convertToSymbolArray.length; i += 3) {
          convertToSymbolArray[i] = "FIZZ"; // меняем каждую третью букву
      }
      convertToWordArray[i] = convertToSymbolArray.join(''); // собираем в строку
    }
    return convertToWordArray.join(" ");
  }
}

const filterArticle = new FizzBuzzDetector(text);

console.log(filterArticle.getOverlappings(), filterArticle.getOverlappings() == 'прFIZZвеFIZZ инFIZZгдFIZZ быFIZZаеFIZZ грFIZZстFIZZо BUZZ не всFIZZгдFIZZ коFIZZечFIZZо');

→ Ссылка