字符串反转
实现字符串反转的多种方法
问题
实现一个函数,将输入的字符串反转后返回。
reverse('hello') // 'olleh'
reverse('abc123') // '321cba'
解答
方法一:数组方法
function reverse(str) {
// 字符串转数组 -> 反转 -> 数组转字符串
return str.split('').reverse().join('');
}
console.log(reverse('hello')); // 'olleh'
方法二:for 循环
function reverse(str) {
let result = '';
// 从后往前遍历,依次拼接字符
for (let i = str.length - 1; i >= 0; i--) {
result += str[i];
}
return result;
}
console.log(reverse('hello')); // 'olleh'
方法三:递归
function reverse(str) {
// 递归终止条件
if (str.length <= 1) return str;
// 取最后一个字符 + 剩余部分的反转
return str[str.length - 1] + reverse(str.slice(0, -1));
}
console.log(reverse('hello')); // 'olleh'
方法四:扩展运算符
function reverse(str) {
// 扩展运算符将字符串展开为数组
return [...str].reverse().join('');
}
console.log(reverse('hello')); // 'olleh'
处理 Unicode 字符
split('') 无法正确处理 emoji 等 Unicode 字符:
// 错误示例
'😀abc'.split('').reverse().join(''); // 乱码
// 正确处理
function reverseUnicode(str) {
// 扩展运算符能正确识别 Unicode 字符
return [...str].reverse().join('');
}
console.log(reverseUnicode('😀abc')); // 'cba😀'
关键点
split('').reverse().join('')是最简洁的写法split('')无法正确处理 emoji,用扩展运算符[...str]代替- 递归方式注意终止条件,避免栈溢出
- 循环方式性能最好,适合处理长字符串
目录