我正在构建一个函数来反转字符串,但是由于未知的原因,由于我对javascript非常陌生(仅3天),因此我无法弄清它,或者可能是我没有掌握一两个概念语言。
基本上,我确定用于循环的字符串的长度。之后,我尝试在slice方法中使用相同的循环变量,以从右到左的方式一次运行该字符串,一次只输入1个字符。
到目前为止,我知道循环工作正常,但是我没有从phrase.slice(i,1)
得到任何值,但是如果我用实数替换i
会起作用。
我认为我在这里有一个概念性问题,不能将动态变量分配给方法。我知道这可以使用其他方法来实现,但是我想知道为什么这样做对我来说是失败的。
function reverseWords(phrase) {
var build_reverse_word;
for (let i = phrase.length ; i > 0 ; i--) {
console.log(i); //This is just to verify that my loop is working
build_reverse_word = phrase.slice(i,1);
build_reverse_word = build_reverse_word + build_reverse_word;
}
return build_reverse_word;
}
let reverse_word_result = reverseWords("Dogs are Great Animals");
console.log(reverse_word_result);
我要实现的是将字符串向后反转。谢谢您的支持。
答案 0 :(得分:3)
.slice
方法接受2个参数。 begin
和end
。您只想在每次迭代中提取一个字母。但是在您的情况下,传入的参数不合适。
function reverseWords(phrase) {
let build_reverse_word = '';
for (let i = phrase.length; i > 0; i--) {
let extracted_letter = phrase.slice(i - 1, i);
build_reverse_word = build_reverse_word + extracted_letter;
}
return build_reverse_word;
}
let reverse_word_result = reverseWords("Dogs are Great Animals");
console.log(reverse_word_result);
避免循环的另一种解决方法是结合使用split
和reverse
方法。
function reverseWords(phrase) {
// split into array
let phraseArray = phrase.split('');
// reverse the array contents
phraseArray.reverse();
// return by joining the array
return phraseArray.join('');
}
let reverse_word_result = reverseWords("Dogs are Great Animals");
console.log(reverse_word_result);
答案 1 :(得分:0)
您的问题是您使用的是list.slice(startIndex,endIndex)
方法。 slice方法定义为endIndex
。由于您的代码使21
始终为1,因此JS试图查找以高数字开头的单词,例如说1
到低数字function reverseWords(phrase) {
var build_reverse_word;
for (let i = phrase.length ; i > 0 ; i--) {
console.log(i); //This is just to verify that my loop is working
build_reverse_word = phrase.slice(i-1,i);
console.log(build_reverse_word)
build_reverse_word = build_reverse_word + build_reverse_word;
}
return build_reverse_word;
}
let reverse_word_result = reverseWords("Dogs are Great Animals");
console.log(reverse_word_result);
,而该单词永远不会工作。所有切片必须具有endIndex> startIndex。因此,您的代码应如下所示。
gvim
现在...您的代码还有其他问题,但是由于您是JS的新手,所以我认为最好自己解决一个问题!
答案 2 :(得分:0)
Sushanth为您提供了解决问题的方法!但是由于您也在学习语言,所以我想给您一些关于字符串的原则:
字符串是父对象String
和六个基元之一的实例。可以使用括号[]
或方法charAt
访问字符串中的字符。
这意味着charAt
或方括号符号也可以使用,并且可能比使用slice
少混淆。
const stringValue = "Dogs are Great Animals"; //make it a constant (it will not change)
//a string is a instance of the super String, which has methods to it like slice and toUppercase.
console.log(stringValue[1]); //get the letter at position 1 - remember JavaScript is zero based.
//use a countdown (more memory efficient and less complicated
let reversed = "";
for (let i = stringValue.length-1; i >= 0; i--)
{
reversed += stringValue[i];//use the += as a shorthand for reversed = reversed + ...
}
console.log(reversed);
您还可以使用split
将字符串转换为数组并优化代码(不使用循环)
const stringValue = "Dogs are great animals";
let reversed = "";
//We can use the split method to turn the string into an array
reversed = stringValue.split("");
reversed = reversed.reverse(); // now the array can be reversed
console.log(reversed.join("")); //we use join to glue the string back together.
这些当然可以结合起来:
并在其中进行一些错误检测。
function reverseWords(phrase) {
//test if phrase is string
if (Object.prototype.toString.call(phrase) === "[object String]") {
return phrase.split("").reverse().join("");
}
else
{
return "Error: object is not a string"; //return error
}
}
let reverse_word_result = reverseWords("Dogs are Great Animals");
console.log(reverse_word_result);