Как заменить дубликаты с данными Dynami c с помощью replace () в Vanilla Js - PullRequest
2 голосов
/ 10 января 2020

Мне нужно решить одну проблему, теперь я пытаюсь описать саму задачу.

Моя задача - создать функцию, которая превращает строку в мексиканскую волну - Ссылка на Википедию

Input (строка) => Output ([массив])

например Input ('wow') => Output ('Wow', 'wOw', 'woW')

Теперь я создал функцию, и все работает нормально, за исключением дубликатов и пробелов

function wave(str) {
  let arr = [];
  let arrUpperSymbols = [];
  let res = [];

  for (let i = 0; i < str.length; i++) {
    arr.push(str);
    arrUpperSymbols.push(arr[i].charAt(i).toUpperCase());

    res.push(arr[i].replace(arr[i].charAt(i), arrUpperSymbols[i]));
  }
  console.log(res);
}

wave("sigrid");

Его возвращение ["Sigrid", "sIgrid", siGrid "," sigRid "," sIgrid "," sigriD "] Но мне нужно использовать UpperCase одну букву за одной итарация по очереди и дублирование динамически, я пробовал обертку arr [i] .charAt (i) в // g, но это не работает.

Буду благодарен за любую помощь, спасибо !!!

1 Ответ

2 голосов
/ 10 января 2020

Лучше использовать slice для обновления любого значения с любым конкретным индексом строки. Вернуть часть строки до и после текущей буквы как есть и изменить букву с текущим индексом.

function wave(str) {
  let res = [];
  for (let i = 0; i < str.length; i++) {
    res.push(str.slice(0, i) + str[i].toUpperCase() + str.slice(i + 1));
    //       ^^^^^^^^^^^^^^    ^^^^^^^^^^^^^^^^^^^    ^^^^^^^^^^^^^^^^
    //       part before i     letter at i            part after i
  }
  console.log(res);
}

wave("sigrid");

Вы также можете создать массив длиной str.length и использовать на нем map().

const wave = str => Array(str.length).fill().map((x,i) => str.slice(0, i) + str[i].toUpperCase() + str.slice(i + 1))

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