es6怎麼實現字串反轉

2022-10-31 22:01:21

實現方法:1、用split、reverse和join函數,語法「str.split('').reverse().join('');」;2、用遞減的for迴圈,語法「for(i=字串長度-1;i>=0;i--){nS+=str[i];}」;3、用遞迴,語法「function f(s){return s===''?'':f(s.substr(1))+s.charAt(0)}」。

前端(vue)入門到精通課程:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:

本教學操作環境:windows7系統、ECMAScript 6版、Dell G3電腦。

反轉字串 是技術面試中最常問到的 JavaScript 問題之一。 面試官可能會要求你使用不同的編碼方式來反轉字串,或者他們可能會要求你不使用內建方法來反轉字串,甚至會要求你使用遞回來反轉字串。

可能有數十種不同的方法可以執行此操作,但內建reverse方法除外,因為 JavaScript 的 String 物件上沒有此方法

以下是我解決 JavaScript 反轉字串問題的三種最有趣的方法。

演演算法要求

反轉提供的字串.
你可能需要將字串轉換為陣列,然後才能將其反轉.
你的結果必須是字串.

function reverseString(str) {
    return str;
}
reverseString('hello');
登入後複製

提供測試用例

  • reverseString(「hello」) 應該返回 「olleh」
  • reverseString(「Howdy」) 應該返回 「ydwoH」
  • reverseString(「Greetings from Earth」) 應該返回 」htraE morf sgniteerG」

1. 使用內建方法反轉字串

對於此解決方案,我們將使用三種方法:String.prototype.split() 方法,Array.prototype.reverse() 方法和 Array.prototype.join() 方法。

  • split() 方法使用指定的分隔符字串將一個 String 物件分割成子字串陣列,以一個指定的分割字串來決定每個拆分的位置
  • reverse() 方法將陣列中元素的位置顛倒,並返回該陣列。陣列的第一個元素會變成最後一個,陣列的最後一個元素變成第一個。該方法會改變原陣列
  • join() 方法將一個陣列(或一個類陣列物件)的所有元素連線成一個字串並返回這個字串。如果陣列只有一個專案,那麼將返回該專案而不使用分隔符
function reverseString(str) {
    // Step 1. 使用 split()方法返回一個新陣列
    var splitString = str.split(''); // var splitString = "hello".split("");
    // ["h", "e", "l", "l", "o"]

    // Step 2.使用 reverse()方法 翻轉陣列
    var reverseArray = splitString.reverse(); // var reverseArray = ["h", "e", "l", "l", "o"].reverse();
    // ["o", "l", "l", "e", "h"]

    // Step 3.使用 join()方法 組合所有的陣列元素,從而變成一個新字串
    var joinArray = reverseArray.join(''); // var joinArray = ["o", "l", "l", "e", "h"].join("");
    // "olleh"

    //Step 4. 返回翻轉後的字串
    return joinArray; // "olleh"
}

reverseString('hello');
登入後複製

三個方法組合形成鏈式呼叫:

function reverseString(str) {
    return str.split('').reverse().join('');
}
reverseString('hello');
登入後複製

2. 用遞減的 for 迴圈反轉字串

function reverseString(str) {
    // Step 1. 建立一個空字串,用來儲存後面新建立的字串
    var newString = '';

    // Step 2.建立for迴圈
    /* 迴圈的起點是(str.length-1),它對應於
        字串的最後一個字元「o」
        只要i大於或等於0,迴圈就會繼續
        每次迭代後遞減i */
    for (var i = str.length - 1; i >= 0; i--) {
        newString += str[i]; // or newString = newString + str[i];
    }
    /* "hello"的length等於 5
        每次迴圈的公式: i = str.length - 1 and newString = newString + str[i]
        第一次迴圈:   i = 5 - 1 = 4,         newString = "" + "o" = "o"
        第二次迴圈:   i = 4 - 1 = 3,         newString = "o" + "l" = "ol"
        第三次迴圈:   i = 3 - 1 = 2,         newString = "ol" + "l" = "oll"
        第四次迴圈:   i = 2 - 1 = 1,         newString = "oll" + "e" = "olle"
        第五次迴圈:   i = 1 - 1 = 0,         newString = "olle" + "h" = "olleh"
    結束for迴圈*/

    // Step 3. 返回已翻轉的字串
    return newString; // "olleh"
}

reverseString('hello');
登入後複製

刪除註釋:

function reverseString(str) {
    var newString = '';
    for (var i = str.length - 1; i >= 0; i--) {
        newString += str[i];
    }
    return newString;
}
reverseString('hello');
登入後複製

3. 用遞迴反轉字串

對於此解決方案,我們將使用兩種方法:String.prototype.substr() 方法和 String.prototype.charAt() 方法

  • substr() 方法返回一個字串中從指定位置開始到指定字元數的字元.

譯者注:

儘管 String.prototype.substr(……) 沒有嚴格被廢棄 (as in "removed from the Web standards"), 但它被認作是遺留的函數並且可以的話應該避免使用。它並非 JavaScript 核心語言的一部分,未來將可能會被移除掉。如果可以的話,使用 substring() 替代它.

'hello'.substr(1); // "ello"
登入後複製
  • charAt() 方法從一個字串中返回指定的字元.
'hello'.charAt(0); // "h"
登入後複製

遞迴的深度等於 String 的長度。 當 String 很長且堆疊大小是主要問題的時候,程式碼執行非常慢。所以此方案不是最佳解決方案

function reverseString(str) {
  if (str === "") // 如果傳入空字串,則直接返回它
    return "";
  else
    return reverseString(str.substr(1)) + str.charAt(0);
/*
遞迴方法的第一部分
你需要記住不會只有一次回撥,會存在多次巢狀回撥
每次回撥的公式: str === "?"                         reverseString(str.subst(1))     + str.charAt(0)
1st call – reverseString("Hello")   will return   reverseString("ello")           + "h"
2nd call – reverseString("ello")    will return   reverseString("llo")            + "e"
3rd call – reverseString("llo")     will return   reverseString("lo")             + "l"
4th call – reverseString("lo")      will return   reverseString("o")              + "l"
5th call – reverseString("o")       will return   reverseString("")               + "o"
遞迴方法的第二部分
該方法達一旦到if條件,巢狀最深的呼叫會立即返回
*/
登入後複製

刪除註釋:

function reverseString(str) {
    if (str === '') return '';
    else return reverseString(str.substr(1)) + str.charAt(0);
}
reverseString('hello');
登入後複製

使用三元表示式:

function reverseString(str) {
    return str === '' ? '' : reverseString(str.substr(1)) + str.charAt(0);
}
reverseString('hello');
登入後複製

JavaScript 字串反轉 是一種小型且簡單的演演算法,在電話技術篩查或技術面試中都可能被問到。 你可以採用最簡單的方式解決此問題,也可以採用遞迴或更復雜的解決方案來解決。

【相關推薦:、】

以上就是es6怎麼實現字串反轉的詳細內容,更多請關注TW511.COM其它相關文章!