如果这已经在这里得到解答,我很抱歉,但我不完全确定要找什么。我最近开始学习编码,因为我认为这是令人愉快的。我使用了一个网站,它告诉我,我已经学习了所有关于javascript的所需(尽管我不认为这是真的)。为了获得一些练习并更好地处理它,我决定做一些挑战。我正在研究一个并且大部分都是正确的。它说要反转任何输入字符串(我不需要编写如何输入代码,至少我认为)。输入是str。我已经得到它来反转所有的字符,包括标点符号,除了引用。要输入,短语必须在引号中。在我的结果中,它没有引用,而是在短语之前有一个NaN。
这是我制作的代码
$username = 'Administrator'
$password = ConvertTo-SecureString 'password' -AsPlainText -Force
$cred = New-Object Management.Automation.PSCredential ($username, $password)
Invoke-Command -Computer $server -ScriptBlock {
Param($msg)
Set-Content -Path C:\blah\foo.html -Value $msg
} -ArgumentList $statusMessage -Credential $cred
如果我输入“Hello,world”,我会得到NaNdlrow,olleH。我是新手,所以如果这可以用更简单的术语来说会有所帮助。你在代码中看到的是关于我所知道的最先进的东西。
感谢您的时间。
答案 0 :(得分:2)
您获得NaN
的原因是因为您从未初始化strC
,而且您还在strS
数组之外访问。
您应该将strC
初始化为空字符串。
为了防止在数组外部访问,请将strL
初始化为str.length-1
,因为数组索引从0
转到length-1
。
循环应该在i < str.length
时重复,而不是i <= str.length
,否则你也会越过开头。
function FirstReverse(str) {
var strL = str.length-1;
var strS = str.split("");
var strC = "";
for(var i = 0; i < str.length; i++){
strC = strC + strS[strL];
strL--;
}
// code goes here
return strC;
}
// keep this function call here
console.log(FirstReverse("abcdef"));
答案 1 :(得分:0)
我想我设法找到了错误。更改for循环
for(var i = 0; i <= str.length; i++)
到for(var i = 0; i < str.length; i++)
。让我知道改变完成后发生了什么!
答案 2 :(得分:0)
您需要切换for循环并将strC定义为空白。由于strC未定义,因此第一次运行d_end = []
for c in df.columns:
temp_df = pd.DataFrame(df[c].value_counts().rename('n'))
temp_df['proportion'] = temp_df['n'] / temp_df['n'].sum()
temp_df['variable'] = c
temp_df.set_index(['variable',temp_df.index],inplace=True)
d_end.append(temp_df)
df_end = pd.concat(d_end,axis=0)
会导致NaN问题。此外,从str.length开始并减少到0似乎更容易。最后,如前所述,不需要分割调用。
strC = strC + strS[i];
答案 3 :(得分:0)
function FirstReverse(str)
{
var strC = "";
var strS = str.split("");
for(var i = str.length-1; i >= 0 ; i--) {
strC += strS[i];
}
return strC;
}
FirstReverse("hello, world");
&#13;
答案 4 :(得分:0)
您的代码中有两个简单的错误,它们会引导您到字符串开头的"NaN"
。
1)您需要在循环之外声明strC
变量,使其初始值为空字符串var strC = "";
。目前第一次通过你的循环是undefined
。
2)第二个错误是你用来索引值strL
的变量,从输入字符串的长度开始,当它应该少一个。这是因为数组是零索引的,因此数组中的最后一项是strS[strS.length - 1]
。 (代码中的strS.length
和str.length
相同)
例如:字符串"abc"
的长度为3
,因此strS
等于["a", "b", "c"]
(长度为3
)因此strS[0]
等于"a"
且strS[2]
等于"c"
。但是,由于您是从长度本身开始而不是length - 1
,因此在循环的第一次迭代中,您要求的strS[3]
为undefined
。
因此,对于此问题,在初始化变量时从长度中减去一个:var strL = str.length - 1;
这导致字母"NaN"
的原因是因为在JavaScript中NaN
是一个特殊值,表示“非数字”,并在转换为字符串时表示为"NaN"
在您的第一个循环strC
上undefined
(第一期)和strS[strL]
是undefined
(第二期),因此您的陈述会转换为var strC = undefined + undefined;
。在JavaScript中,undefined + undefined
被视为数学表达式,并生成NaN
。
因此,在第二次循环开始时,strC
等于NaN
,而strL
现在指向数组中的最后一项,因此您获得了{{ 1 {}从"d"
结束。因此,您的语句转换为"Hello, world"
,strC = NaN + "d";
转换为字符串,因为NaN
被视为字符串连接运算符,您最终得到+
,然后其余的你的循环运行得很好。
有一些更好的方法可以完成你想要完成的任务,但是当你学习和练习更多时,你会把它们弄清楚,现在你知道你的代码为什么会这样做以及这个奇怪的地方{{1}废话来自。 :)
此外,我认为你似乎很困惑为什么你的输入有引号而不是输出。您输入的内容为"NaNd"
的字符串,但字符串在引号ala "NaN"
包围的代码中表示,因此您不应在输出中获得引号。
哦,为了清楚起见,您的代码修正如下:
Hello, world
但是有一些更简单的方法,比如使用循环计数器本身从输入长度开始倒计时:
"Hello, world"
甚至可以访问字符串本身而无需分担:
function FirstReverse(str) {
var strL = str.length - 1;
var strS = str.split("");
var strC = "";
for (var i = 0; i <= str.length; i++) {
strC = strC + strS[strL];
strL = strL - 1;
}
return strC;
}
甚至只是使用一些内置的字符串和数组函数:
function FirstReverse(str) {
var strS = str.split("");
var strC = "";
for (var i = str.length - 1; i >= 0; i--) {
strC = strC + strS[i];
}
return strC;
}