Изменить строку на каждой итерации цикла - PullRequest
0 голосов
/ 13 декабря 2018

У меня следующая проблема: у меня есть строка, и мне нужно заменить ее на различные части регулярного выражения.

, поэтому я хочу зациклить ее:

В моем случае это 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, '');
  });
}

всегда для каждой итерации передает ТО ЖЕ 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: используйте переменную

Буду очень рад за подсказку здесь.спасибо

ура

Ответы [ 4 ]

0 голосов
/ 13 декабря 2018

Тем временем я тоже нашел способ:

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

Мысли об этом?

0 голосов
/ 13 декабря 2018

Переназначение параметра функции было бы прекрасно в этом случае использования.

Если вы действительно не хотите переназначать параметр функции по какой-либо причине, вы можете ввести новую переменную для хранения обновленного URL-адреса.для вас.

cleanURL(url, params) {
    let newUrl = url;
    params.forEach((param) => {
        newUrl = this.updateUrlParameter(newUrl, param, '');
    });
    return newUrl;
}
0 голосов
/ 13 декабря 2018

Если вы не хотите изменять параметр, используйте временную переменную для хранения результата.

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));
0 голосов
/ 13 декабря 2018

String.prototype.replace не изменяет исходную строку, а создает новую строку.

Если вы обновляете свой метод clearUrl, чтобы переназначать url в каждой итерации, которую выдолжны получить замены для всех параметров

cleanURL(url, params) {
  params.forEach((param) => {
    url = this.updateUrlParameter(url, param, '');
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...