Более эффективное решение, использующее цикл для замены пробелов javascript - PullRequest
0 голосов
/ 22 марта 2019
this can be found in other forums and posts like what people have said thank you.

Я пытаюсь создать функцию, использующую цикл, который заменяет "" на% 20, но если они являются пробелами до и после строки, то "" не заменяется на% 20. У меня есть решение с использованием цикла что требуется, мне просто интересно, если я могу сделать это более точным и кратким, любая помощь будет оценена.

console.log(urlEncode("Hello World"));
console.log(urlEncode(" Hello World "));
console.log(urlEncode("This is my Hello World Program"));

Hello%20World
Hello%20World <--- if their is space before or after it does not count
This%20is%20my%20Hello%20World%20Program

Ответы [ 4 ]

3 голосов
/ 22 марта 2019

Как насчет:

const urlEncode = function(text) {
    return text.trim().replace(/\b \b/g, '%20')
}

При этом используется встроенный метод замены и сопоставляется пробел, окруженный двумя не пробелами.

Если вы действительно хотите использовать цикл:

const urlEncode = function(text) {
    const n = text.length;
    const start = text[0] === ' ' ? 1 : 0;
    const end = text[n - 1] === ' ' ? n - 1 : n;
    let result = "";

    for (let i = start; i < end; i++) {
         result += text[i] == ' ' ? '%20' : text[i];
    }

    return result;
}
1 голос
/ 22 марта 2019

Я уверен, что на этот вопрос уже был дан ответ, прежде чем вам следует заняться исследованиями, но есть вариант.

const urlEncode = (str) => {
  return str.trim().replace(/\s/g, '%20');
}

редактировать: ааа, Готча пропустил, зацикливая часть

const urlEncode = (str) => {
  str = str.trim();
  let encodedStr = '';
  let index = 0;
  for (let i = 0; i < str.length; i++) {
    if(str[i] === ' ') {
      encodedStr += str.slice(index, i)+'%20';
      index = i+1;
    }
  }
  return encodedStr + str.split(' ').pop();
};

Мне все еще приходилось использовать сплит. Я буду продолжать думать.

Edit3: Понял!

const urlEncode = (str) => {
  str = str.trim();
  let encodedStr = '';
  let index = 0;
  for (let i = 0; i < str.length; i++) {
    if(str[i] === ' ') {
      encodedStr += str.slice(index, i)+'%20';
      index = i+1;
    }
  }
  return encodedStr + str.slice(index, str.length);
};

Если у вас есть какие-либо вопросы, не стесняйтесь спрашивать!

1 голос
/ 22 марта 2019

См. Комментарий Томаса.Использование javascripts native encodeURIComponent является, вероятно, самым простым и безопасным.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

0 голосов
/ 22 марта 2019
function urlEncode(txt){
  let text = txt.split("");
  let acc = "";
  for(let i = 0; i < text.length; i++){
    let curr = text[i];
    let ret = curr;
    let inx = i;
    if(curr === " " && (inx === 0 || (inx === txt.length - 1))){
      ret = " ";
    } else if(curr === " "){
      ret = "%20";
    }
    acc += ret;
  }
  return acc;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...