How do you reverse a string in place in JavaScript?

前端 未结 30 2423
猫巷女王i
猫巷女王i 2020-11-22 00:29

How do you reverse a string in place (or in-place) in JavaScript when it is passed to a function with a return statement, without using built-in functions (.reverse()<

30条回答
  •  梦毁少年i
    2020-11-22 00:42

    The real answer is: you can't reverse it in place, but you can create a new string that is the reverse.

    Just as an exercise to play with recursion: sometimes when you go to an interview, the interviewer may ask you how to do this using recursion, and I think the "preferred answer" might be "I would rather not do this in recursion as it can easily cause a stack overflow" (because it is O(n) rather than O(log n). If it is O(log n), it is quite difficult to get a stack overflow -- 4 billion items could be handled by a stack level of 32, as 2 ** 32 is 4294967296. But if it is O(n), then it can easily get a stack overflow.

    Sometimes the interviewer will still ask you, "just as an exercise, why don't you still write it using recursion?" And here it is:

    String.prototype.reverse = function() {
        if (this.length <= 1) return this;
        else return this.slice(1).reverse() + this.slice(0,1);
    }
    

    test run:

    var s = "";
    for(var i = 0; i < 1000; i++) {
        s += ("apple" + i);
    }
    console.log(s.reverse());
    

    output:

    999elppa899elppa...2elppa1elppa0elppa
    

    To try getting a stack overflow, I changed 1000 to 10000 in Google Chrome, and it reported:

    RangeError: Maximum call stack size exceeded
    

提交回复
热议问题