首页 > 解决方案 > 如何在 Vanilla Js 中通过 replace() 使用动态数据更改重复项

问题描述

我需要解决一个问题,现在我尝试描述任务本身。

我的任务是创建一个函数,将字符串变成墨西哥波 -维基百科链接

输入(字符串)=> 输出([数组])

例如 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"] 但我需要大写一个字母一个接一个地循环并动态复制,我试过 wrapp arr[i ].charAt(i) 在 //g 但它不起作用。

我将不胜感激任何帮助,谢谢!!!

标签: javascriptfunctionmethods

解决方案


最好使用它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"));


推荐阅读