首页 > 解决方案 > 在每次循环迭代时更改字符串

问题描述

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

因此我想循环它:

在我的情况下,它是一个 URL,我想为特定参数清空:

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, '');
  });
}

对于每次迭代,总是将 SAME 传递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 循环:使用变量

很高兴在这里得到提示。谢谢你

干杯

标签: javascriptregexfor-loopreplace

解决方案


如果您不想改变参数,请使用临时变量来保存结果。

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));


推荐阅读