Заменить внутренние пробелы в строке на %20 используя цикл

118
09 декабря 2020, 11:10

Нашла решение, но оно достаточно запутанное и заменяет пробелы в начале и конце строки, а нужно их не заменять, а удалять. Решение должно быть только с использованием цикла без String.prototype.replace. Помогите, пожалуйста с решением.

function replaceSpaces(str) {
    str = str.split('');
    let spaces = 0;
    for (let i = 0; i < str.length; i++) {
        if (str[i] === ' ') {
            spaces++;
        }
    }
    // i - указатель на текущий символ исходной строки
    // j - указатель на текущий символ новой строки
    for (let i = str.length - 1, j = str.length + 2 * spaces; i >= 0; i--) {
        if (str[i] === ' ') {
            str[j - 1] = '0';
            str[j - 2] = '2';
            str[j - 3] = '%';
            j -= 3;
        } else {
            str[j - 1] = str[i];
            j -= 1;
        }
    }
    return str.join('');
}
console.log(replaceSpaces("Lighthouse Labs"));
console.log(replaceSpaces(" Lighthouse Labs "));
console.log(replaceSpaces("blue is greener than purple for sure"));

Ожидаемый вывод должен быть таким:

Lighthouse%20Labs
Lighthouse%20Labs
blue%20is%20greener%20than%20purple%20for%20sure
Answer 1

Я предполагаю, что это текст, который нужно преобразовать в ссылку. В JS есть дефолтная функция, которая делает это:

var str = "   salam aleykum"; 
console.log(encodeURIComponent(str.trim())) //Output: salam % 20 aleykum

UPD:

function replaceSpaces(text) { 
  text = text.trim() 
 
  var str = ""; 
 
  for (var i = 0; i < text.length; i++) { 
    if (text[i] == " ") { 
      str += "%20"; 
      continue; 
    } else str += text[i]; 
  } 
  return str; 
} 
 
console.log(replaceSpaces("     red green blue"));

Answer 2

Кажется так работает. Это надо?

let str = 'blue is greener than purple for sure'; 
let str1 = ' Space before'; 
let str2 = 'Space after '; 
 
function replaceSpaces(s) { 
  let newStr = ''; 
     
  for(let i = 0; i < s.length; i++) { 
    if(s[i] === ' ') { 
      if(i === 0) continue; 
      if(i === s.length - 1) continue; 
      newStr += '%20'; 
      continue; 
    } 
    newStr += s[i]; 
  } 
  return newStr; 
} 
 
console.log(replaceSpaces(str)); 
console.log(replaceSpaces(str1)); 
console.log(replaceSpaces(str2));

READ ALSO
TypeError: Argument 1 is not valid for any of the 1-argument overloads of URL.createObjectURL

TypeError: Argument 1 is not valid for any of the 1-argument overloads of URL.createObjectURL

Есть скрипт с выбором файла/изображенияЯ спрятал стандартный input

158
Не могу понять почему интервал не останавливается

Не могу понять почему интервал не останавливается

Всем привет, я написал код, сделал интервал чтобы повторялась функция, но только есть проблема, мне нужно после 3 повторений остановить интервал,...

97
Оптимизировать алгоритм LSFR / MISR

Оптимизировать алгоритм LSFR / MISR

Необходимо сделать программу реализующий этот алгоритмАлгоритм done работает

105