我编写了一个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]);
}
}
}
当我在新的字符串对象(" asd")上调用reverse方法时,它会产生以下输出:
undefined
d
s
a
undefined
来自哪里?你能帮我消除这个吗?
答案 0 :(得分:3)
已解释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');
function ReverseString(string) {
this.str = string;
this.reverse = function() {
var rev = this.str.split('').reverse();
void(rev.map(function(v) {
result.innerHTML += v + '<br>';
}));
this.reversed = rev.join('');
};
}
var myReversed = new ReverseString('hello world');
myReversed.reverse();
&#13;
<div id="result"></div>
&#13;
答案 1 :(得分:2)
简单的步骤
'hello world'.split(' ').map(word=>word.split('').join('')).join(' ');
它将在原处反转每个单词
"olleh dlrow"
答案 2 :(得分:1)
一开始,size
将为3(长度)。索引3
没有任何内容,因此undefined
。您需要在length-1
启动它。
var size = this.str.length - 1;
答案 3 :(得分:0)
用户recusrsivity,最简单的方法
function reverse(str){
if (str.length == 0){
return '';
}
return reverse(str.slice(1)) + charAt(0);
}
答案 4 :(得分:0)
我会使用reduceRight
:
function sum(arr) {
return arr.reduceRight(function(result, chr) {
return result += chr;
});
}
现在我有一个方便的例程,我也可以用它来总结数字序列(按相反的顺序,但这并不重要)..对于字符串:
function reverse_string(str) {
return sum(str.split(''));
}
答案 5 :(得分:0)
size
开头应为length -1
。您可以将字符串反转与字符串打印混合使用,但是可以按以下步骤将其分开
let str = "Hello World!";
let r = [...str].reverse().join``;
console.log(r);
答案 6 :(得分:0)
以相反的顺序遍历字符串并将字母推入数组,然后加入数组
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('');
}
使用拆分,反向和联接方法
function reverse2(str) {
return str.split().reverse().join();
}
使用ES6 arroe函数和传播运算符进行复制以及将字符串转换为数组,然后反转并加入
reverse3 = str => [...str].reverse().join('');
调用这三个功能
console.log(reverse1("Hello World!"));
console.log(reverse2("Hello World!"));
console.log(reverse3("Hello World!"));
!dlroW olleH
Hello World!
!dlroW olleH
答案 7 :(得分:0)
在这里,您获得了'string'构造函数参数的大小,并减小了给定单词('size'变量)的长度。
function ReverseString(string) {
this.str = string;
var size = this.str.length;
this.reverse = function () {
for(size; size >= 0; --size) //loop from index value 3 to 0
{ console.log(this.str[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