【问题标题】:Filtering a string by for loop word by word通过for循环逐字过滤字符串
【发布时间】:2020-05-10 21:33:17
【问题描述】:

我正在尝试创建一个 for 循环,该循环在删除不需要的单词后最终会返回一个过滤后的字符串。

例如,当给定 red yellow green black blue white 我希望输出为 red green blue

const givenString = 'red yellow green black blue white';
const unwantedWords = ['yellow', 'black', 'white'];

for(i = 0; i < unwantedWords.length; i++){
   let finalString = givenString.replace(unwantedWords[i], '');
   console.log(finalString)
}

问题是这会返回多个日志,每个日志都删除了三个单词之一。不是删除所有单词的最终日志

【问题讨论】:

    标签: javascript for-loop replace


    【解决方案1】:

    编辑

    只是想分享一个漂亮的 ES6 一行。

    const result = unwantedWords.reduce((prev, current)=>prev.replace(current,''), givenString);
    

    您每次都在循环内定义变量,所以本质上您只是过滤掉并丢弃它。您应该在循环之外定义它并在循环内更改它。

    const givenString = 'red yellow green black blue white';
    const unwantedWords = ['yellow', 'black', 'white'];
    let finalString = givenString;
    for (i = 0; i < unwantedWords.length; i++) {
      finalString = finalString.replace(unwantedWords[i], '');
    }
    console.log(finalString)

    【讨论】:

      【解决方案2】:

      您的givenString 没有改变。 finalString 每次从 givenString 每次循环将新更改为 finalString 时都会更改。

      const givenString = 'red yellow green black blue white';
      const unwantedWords = ['yellow', 'black', 'white'];
      let finalString = givenString;
      for (i = 0; i < unwantedWords.length; i++) {
        finalString = finalString.replace(unwantedWords[i], '');
      }
      console.log(finalString)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-21
        • 1970-01-01
        相关资源
        最近更新 更多