递归JS函数将特定字符移动到字符串末尾

Recursive JS Function To Move Specific Characters To End Of String

例如:

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

测试字符串参数的第一个字符是否为x。如果是这样,return 递归调用 x 连接 - 否则,return 与递归调用连接的第一个字符:

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 变量看起来没有用处。

尝试将所有非目标字符与所有目标字符连接到末尾:

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。