反向字串

在 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"