JavaScript 中的反转字符串

Ran*_*ser 5 javascript

我写了一个 JS 构造函数来反转字符串变量:

function ReverseString(string) {
    this.str = string;
    var size = this.str.length;
    this.reverse = function () {
        for(size; size >= 0; --size) {
            console.log(this.str[size]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在新的字符串对象()上调用反向方法时,"asd"它会产生以下输出:

  undefined 
    d 
    s 
    a
Run Code Online (Sandbox Code Playgroud)

undefined是从哪里来的?你能帮我消除这个吗?

Koo*_*Inc 6

问题length已经解释了。为了解决它,你可以使用:

\n
function ReverseString(string) {\n    this.str = string;\n    var size = this.str.length;\n    this.reverse = function () {\n        while(size--) {\n            console.log(this.str[size]);\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

反转字符串的另一种(更简单的方法)是将其拆分为一个数组,反转该数组,然后再次连接:

\n
somestring.split(\'\').reverse().join(\'\');\n
Run Code Online (Sandbox Code Playgroud)\n

应用于您的方法,类似于此代码片段:

\n

\r\n
\r\n
function ReverseString(string) {\n    this.str = string;\n    var size = this.str.length;\n    this.reverse = function () {\n        while(size--) {\n            console.log(this.str[size]);\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\r\n
somestring.split(\'\').reverse().join(\'\');\n
Run Code Online (Sandbox Code Playgroud)\r\n
const result = document.querySelector(\'#result\');\nconst RString = stringFactory();\n\n// constructor\nconst myReversed = new ReverseString(\'hello world\');\nmyReversed.reverse();\n\n// factory\nresult.textContent += ` | `;\nRString(`Hello World`).printReversed(result);\n\nfunction ReverseString(string) {\n  this.str = string;\n  this.reverse = function() {\n    const rev = this.str.split(\'\').reverse();\n    rev.forEach(v => result.textContent += v);\n    this.reversed = rev.join(\'\');\n  };\n}\n\n// factory pattern\n// see also https://github.com/KooiInc/es-stringbuilder-plus\nfunction stringFactory() {\n  return str => assignHelpers(str);\n  \n  function assignHelpers(str) {\n    return {\n      get reverse() { return str.split(\'\').reverse().join(``); },\n      printReversed(elem) {\n        str.split(\'\').reverse().forEach( l => \n          elem.textContent += l );\n      }\n    };\n  }\n}
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

为了规避@Mark Ba​​ijens评论的问题(组合 Unicode 字符,又名代理对),现代解决方案 (es20xx) 可能是:

\n

\r\n
\r\n
#result {\n  letter-spacing: 0.5rem;\n  font-size: 1.3rem;\n  font-weight: bold;\n}
Run Code Online (Sandbox Code Playgroud)\r\n
<div id="result"></div>
Run Code Online (Sandbox Code Playgroud)\r\n
const str = `foo  bar ma\xc3\xb1a\xc3\xb1a`;\ndocument.querySelector(`#result`)\n  .textContent = [...str].reverse().join(``);
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n


Sci*_*ter 2

一开始,size将为 3(长度)。3因此,索引处没有任何内容undefined。您需要在 启动它length-1

var size = this.str.length - 1;
Run Code Online (Sandbox Code Playgroud)