有很多方法可以实现这样的功能,但鉴于我们在这里得到的,解决“也许有人可以找到我的错误”部分可能更有指导意义。单步执行您的代码,错误多于权利,因此甚至不清楚您的意图。
var stringlength = str.length-1;
这很奇怪,我们不知道你在这里想要达到什么目的。stringlength
从未在函数中使用:
for (var i=0; i<strAlpha.length; i++) {
您正在遍历字母表。我有一种感觉你想迭代你的输入参数str
?
if (strAlpha < strAlpha[i].length){
这也很奇怪。目前尚不清楚您要在这里测试什么。您当前正在检查字母表(一个字符串,总是相同的值)是否小于(即按字母顺序出现length
在字母表位置的字符之前) i
。鉴于i
在字母范围内,strAlpha[i]
将始终只返回一个字符。strAlpha[i].length
只能是 1 或抛出异常。现在,由于您将字符串与数值1
进行比较,因此字符串比较将是数值小于条件。你的情况几乎总是会说if('abc...' < 1)
这永远不会是真的。
LetterChanges += strAlpha[i] +1;
如果您的代码确实输入了条件,它会遇到这种情况。添加strAlpha[i]+1
到LetterChanges
. 再次,strAlpha[i]
是字母表中的字母i
。对于i = 0
,strAlpha[i] = 'a'
和'a' + 1 = 'a1'
. 您正在遍历整个字母表;如果您的条件评估为真,您最终会得到LetterChanges = 'a1b1c1...'
. 在这里,我将假设您的意思是strAlpha[i+1]
,这将在 position 处产生字母表中的字母i+1
。您仍在遍历整个字母表,最终会将所有字符向上移动一个位置,LetterChanges = 'bce...'
.
return str;
最后,您返回字符串。这里有两个问题。主要的一个是您返回输入参数str
而从未接触过它。您将始终返回您传递给函数的任何内容。你的意思是return LetterChanges;
?第二个问题是您在循环中返回它,for
这意味着它将在第一次迭代时退出函数,i=0
返回传入的任何内容。
如果您更改为return LetterChanges;
处于此状态,它将返回一个空字符串。如果您更改条件以使其评估为 true 并更改为return LetterChanges;
它会返回'b'
。如果您同时进行了这些更改并将 return 语句移到了循环之外,那么'bcedefghijklmnopqrstuvwxyz'
无论您传递了什么,它都会返回。
这里有很多问题,我们无法告诉你应该修复什么才能让你的代码正常工作。您需要退后一步,看看您正在尝试做什么。