JavaScript中的反向字符串
我编写了一个JS构造函数,可以反转字符串变量:JavaScript中的反向字符串,javascript,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]); } } } 当我对
function ReverseString(string) {
this.str = string;
var size = this.str.length;
this.reverse = function () {
for(size; size >= 0; --size) {
console.log(this.str[size]);
}
}
}
当我对新字符串对象(“asd”
)调用反向方法时,它会生成以下输出:
undefined
d
s
a
此
未定义的来自何处?你能帮我消除这个吗 开始时,大小将是3(长度)。索引3
中没有任何内容,因此未定义。您需要在length-1
处启动它
var size = this.str.length - 1;
用户可重复性,最简单的方法
function reverse(str){
if (str.length == 0){
return '';
}
return reverse(str.slice(1)) + charAt(0);
}
length
问题已经解释过了。要解决此问题,您可以使用:
function ReverseString(string) {
this.str = string;
var size = this.str.length;
this.reverse = function () {
while(size--) {
console.log(this.str[size]);
}
}
}
反转字符串的另一种(更简单的方法)是将其拆分为一个数组,反转该数组,然后再次连接:
somestring.split('').reverse().join('');
应用于您的方法,类似于以下代码段:
var result=document.querySelector('#result');
函数反向限制(字符串){
this.str=字符串;
this.reverse=函数(){
var rev=this.str.split(“”).reverse();
无效(修订地图(功能(v)){
result.innerHTML+=v+'
';
}));
此值为反向=反向连接(“”);
};
}
var myReversed=newreversestring('helloworld');
myReversed.reverse()代码>
我会使用还原灯
:
function sum(arr) {
return arr.reduceRight(function(result, chr) {
return result += chr;
});
}
现在我有了一个方便的例程,我也可以用它来对数字序列求和(按相反的顺序,但这并不重要)。。对于字符串:
function reverse_string(str) {
return sum(str.split(''));
}
开头的大小
应为长度-1
。您可以将字符串反转与字符串打印混合使用,但可以按如下方式将其分离
let str=“你好,世界!”;
让r=[…str].reverse().join`;
控制台日志(r)代码>这里有三种在javascript中反转字符串的方法
以相反的顺序遍历字符串并将字母推送到数组,然后加入数组
function reverse1(str) {
if(!str || str.length < 2 || typeof str !== "string") {
return new Error("Not a valid input");
}
const backwards = [];
for (let i = str.length; i > -1; i--) {
backwards.push(str[i]);
}
return backwards.join('');
}
使用ES6 arroe函数和spread运算符将字符串复制并转换为数组,然后反转并连接
reverse3 = str => [...str].reverse().join('');
调用这三个函数
console.log(reverse1("Hello World!"));
console.log(reverse2("Hello World!"));
console.log(reverse3("Hello World!"));
输出
这个简单的步骤怎么样
'hello world'.split(' ').map(word=>word.split('').join('')).join(' ');
它会将每个单词颠倒过来
"olleh dlrow"
在这里,您得到了'string'构造函数参数的大小,并减少了给定单词的长度('size'变量)
但问题是,当您输入单词“asd”时,该字符串的长度是3。因此,当您访问str[3]的索引时,应该是未定义的。因为
index[0] --> a
index[1] --> s
index[2] --> d
index[3] --> undfined
所以,您的代码应该更改
function ReverseString(string) { this.str = string;
var size = this.str.length;
this.reverse = function () {
for(size; size > 0; --size) //loop from index value 2 to 0
{ console.log(this.str[size - 1]);
}
}
}
所以,输出应该是这样的
index[0] --> a
index[1] --> s
index[2] --> d
字符串中的字符索引范围从零到字符串长度减1。此外,为了防止您不想重新发明轮子,str.split(“”)。reverse().join(“”)是一个有用的习惯用法。可能与just好奇重复,你发明一种全新的物体ReverseString
的原因是什么?它的唯一目的就是扭转它所持有的字符串?你打算一次又一次地颠倒它吗?让我看看,在发布这个问题之前,你搜索了“反转字符串javascript”,但我猜没有找到任何东西。似乎以前没有人有过这个问题。除了(请参阅下面的重复答案)和非现场资源,例如。我认为更好的办法是修复循环中的条件或为变量指定不同的名称。我不喜欢名为size
的变量,它实际上不是字符串的大小(长度)。我同意size
不是最好的名称,但名称不是最重要的。逻辑是这样的。当然,好的名称也会有所帮助。一个名为size
的变量,它实际上不是某个事物的大小,对我来说听起来非常不合逻辑。与其使用str.substring(1,str.length)
,不如使用str.slice(1)
。您还缺少了if
子句的parens。我不认为OP在寻找替代实现,而是在问为什么它们的实现会产生一些意外的结果。谢谢,更改:)我现在正在使用delphi,以前编写时没有parens x)@MattBurland-Yup,只是给出了另一个更快的解决方案。可重复性是有用的:3
index[0] --> a
index[1] --> s
index[2] --> d
index[3] --> undfined
function ReverseString(string) { this.str = string;
var size = this.str.length;
this.reverse = function () {
for(size; size > 0; --size) //loop from index value 2 to 0
{ console.log(this.str[size - 1]);
}
}
}
index[0] --> a
index[1] --> s
index[2] --> d