代码之家  ›  专栏  ›  技术社区  ›  Merc

在每个循环迭代中更改字符串

  •  3
  • Merc  · 技术社区  · 6 年前

    我有以下问题: 我有一个字符串,需要替换不同的正则表达式部分。

    cleanURL(url, params) {
      params.forEach((param) => {
      url = this.updateUrlParameter(url, param, '');
    });
    

    鉴于我有:

    updateUrlParameter(url, param, value) {
      const regex = new RegExp(`(${param}=)[^&]+`);
      const newURL = url.replace(regex, `$1${value}`);
      return newURL;
    }
    

    这是我让它工作的唯一方法,但现在我正在重新分配一个函数参数。 这不是我想要的。

    cleanURL(url, params) {
      params.forEach((param) => {
        this.updateUrlParameter(url, param, '');
      });
    }
    

    每次迭代都会通过相同的过程吗 url

    我不得不将一个更改过的字符串传递到下一个循环迭代中。

    我怎样才能做到这一点? 也许往这个方向走? 以某种方式嵌套并再次调用该函数?

    while(outerI--){
      (function(i){
        i+=1;//doesn't affect outerI and you wanted 1-length so we add one.
    
        //crap inside your forEach loop but without the i++
      })(outerI)
    }
    

    我在这里发现: .forEach loop: use variable

    我很高兴得到一个提示。 非常感谢。

    4 回复  |  直到 6 年前
        1
  •  1
  •   NikxDa    6 年前

    如果您确实不想出于任何原因重新分配函数参数,可以引入一个新变量来存储更新后的URL。

    cleanURL(url, params) {
        let newUrl = url;
        params.forEach((param) => {
            newUrl = this.updateUrlParameter(newUrl, param, '');
        });
        return newUrl;
    }
    
        2
  •  1
  •   Solo    6 年前

    function updateUrlParameter(url, param, value) {
      const newURL = url + param;
      return newURL;
    }
    
    function cleanURL(url, params) {
      let temp = url;
      params.forEach((param) => {
        temp = updateUrlParameter(temp, param, '');
      });
      return temp;
    }
    
    const params = [1, 2, 3, 4, 5];
    const url = 'string';
    console.log(cleanURL(url, params));
        3
  •  0
  •   shawon191    6 年前

    这个 String.prototype.replace 不修改原始字符串,而是创建新字符串。

    如果你更新你的 clearUrl 重新分配的方法 url

    cleanURL(url, params) {
      params.forEach((param) => {
        url = this.updateUrlParameter(url, param, '');
      });
    }
    
        4
  •  0
  •   Merc    6 年前

    与此同时,我也找到了一种方法:

    cleanURL(url, params) {
      const paramsLength = params.length;
      const cleanURL = url;
    
      const recursive = (i, originalURL) => {
        this.log('i: ', i);
        this.log('originalURL: ', originalURL);
        if (i > 0) {
          const changedURL = this.updateUrlParameter(originalURL, params[i - 1], '');
          return recursive(i - 1, changedURL);
        }
        return originalURL;
      };
      // this.log('url: ', url);
      return recursive(paramsLength, cleanURL);
    }
    
    updateUrlParameter(url, param, value) {
      const regex = new RegExp(`(${param}=)[^&]+`);
      // this.log('regex: ', regex);
      const newURL = url.replace(regex, `$1${value}`);
      // this.log('newURL: ', newURL);
      return newURL;
    }
    

    对此有何想法?