反向字符串

在 JavaScript 中反转字符串的最流行方式是以下代码片段,这很常见:

function reverseString(str) {
    return str.split('').reverse().join('');
}

reverseString('string');    // "gnirts"

但是,只有在被反转的字符串不包含代理项对时,这才会起作用。星体符号,即基本多语言平面之外的字符,可以由两个代码单元表示,并且将导致这种天真的技术产生错误的结果。此外,具有组合标记(例如分音符)的字符将出现在逻辑下一个字符上,而不是与其组合的原始字符上。

'𝌆■.'.split('').reverse().join(''); //fails

虽然该方法适用于大多数语言,但是对于字符串反转而言,真正准确的编码尊重算法稍微复杂一些。一个这样的实现是一个名为 Esrever 的小型库,它使用正则表达式来匹配组合标记和代理对,以便完美地执行反转。

说明

部分 说明 结果
str 输入字符串 string
String.prototype.split( deliminator ) 将字符串 str 拆分为数组。参数 "" 表示在每个字符之间进行拆分。 ["s","t","r","i","n","g"]
Array.prototype.reverse() 从拆分字符串返回数组,其元素的顺序相反。 ["g","n","i","r","t","s"]
Array.prototype.join( deliminator ) 将数组中的元素连接成一个字符串。"" 参数表示空的分隔符(即,数组的元素彼此相邻)。 gnirts

使用传播运算符

Version >= 6

function reverseString(str) {
    return [...String(str)].reverse().join('');    
}

console.log(reverseString('stackoverflow'));  // "wolfrevokcats"
console.log(reverseString(1337));             // "7331"
console.log(reverseString([1, 2, 3]));        // "3,2,1"

自定义 reverse() 功能

function reverse(string) {
    var strRev = "";
    for (var i = string.length - 1; i >= 0; i--) {
        strRev += string[i];
    }
    return strRev; 
}

reverse("zebra");  // "arbez"