Рекурсивная JS функция для перемещения специфики c символов в конец строки - PullRequest
1 голос
/ 11 апреля 2020

Например:

  1. moveAllXToEnd ("xxre") -> "rexx"
  2. moveAllXToEnd ("xxhixx") -> "hixxxx"
  3. moveAllXToEnd ("xhixhix") -> "hihixxx"
function moveAllXToEnd(str, count = 1) {

    if (str.length <= 1) {
        return str;
    }

    // console.log(str.length, count);
    if (str.length === count) {
        return str;
    }

    if (str[count] === 'x') {
        // Removing the x and putting the '' empty string
        let splicedString = str.substr(0, count) + '' + str.substr(count + 1);
        // Adding back the 'x' to the end of the string
        splicedString += str[count];
        return moveAllXToEnd(splicedString, count + 1);
    }

    return moveAllXToEnd(str, count + 1);
}

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Попробуйте выполнить объединение всех нецелевых символов со всеми конечными символами, добавленными в конец:

function moveAllXToEnd (input) {
    return input.replace(/x+/g, "") + input.replace(/[^x]+/g, "");
}

console.log(moveAllXToEnd("xxre"));
console.log(moveAllXToEnd("xxhixx"));
console.log(moveAllXToEnd("xhixhix"));

Первый член, составляющий output, - это просто исходный ввод со всеми обрезанными буквами x. Для этого мы в конце объединяем все x во входных данных.

0 голосов
/ 11 апреля 2020

Проверьте, является ли первый символ строкового аргумента x. Если это так, верните рекурсивный вызов , объединенный с x - в противном случае верните первый символ, объединенный с рекурсивным вызовом:

console.log(moveAllXToEnd("xxre")) // --> "rexx"
console.log(moveAllXToEnd("xxhixx")) // --> "hixxxx"
console.log(moveAllXToEnd("xhixhix")) // --> "hihixxx"
function moveAllXToEnd(str) {
  if (str.length <= 1) {
    return str;
  }
  return str[0] === 'x'
    ? moveAllXToEnd(str.slice(1)) + 'x'
    : str[0] + moveAllXToEnd(str.slice(1));
}

Переменная count не предназначена для достижения цели.

...