递归JS函数将特定字符移动到字符串末尾
Recursive JS Function To Move Specific Characters To End Of String
例如:
- moveAllXToEnd("xxre") --> "rexx"
- moveAllXToEnd("xxhixx") --> "hixxxx"
- 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。
例如:
- moveAllXToEnd("xxre") --> "rexx"
- moveAllXToEnd("xxhixx") --> "hixxxx"
- 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。