Javascript 我如何数数和计算它?(i使用isNaN()
我的代码如下。我使用的是isNaN,但问题是它仍然有效 函数编号ARCHSTR{ 设和=0 设strCount=0 如果str=={ 返回0 }; 对于let i=0;iJavascript 我如何数数和计算它?(i使用isNaN(),javascript,Javascript,我的代码如下。我使用的是isNaN,但问题是它仍然有效 函数编号ARCHSTR{ 设和=0 设strCount=0 如果str=={ 返回0 }; 对于let i=0;i1. 输出=数字搜索“你好,世界2”; console.logoutput;//->1问题是sum=sum+Numberstr[i]正在执行,即使isNaNNumberstr[i]==true,因为它在if块之外。您需要将其包装在else块中,以便它仅在前一个条件为false时执行 函数编号ARCHSTR{ 设和=0 设st
console.logoutput;//->1想想下面的例子
for(let i = 0 ; i<str.length ; i++){
//str[0] is 'H', so fall into the first if-case
if(isNaN(Number(str[i]))){
strCount = strCount + 1 // if it's true, +1
}
//the code keep running but 'H' shouldn't fall into the following case
sum = sum + Number(str[i]) // if it's a number
}
return Math.round(sum/strCount);
你的主要问题是你还是要加一个数字。在sum=sum+Numberstr[i]行中,为每个字符读取。因此,即使最后一个字符也是NaN,它将被添加到总和中,使之为NaN 我不太确定你想在这里做什么,好像你想得到和,然后除以非数字字符的数量 你需要跳过总数中的那些。有很多方法可以做到这一点,代码中还有其他一些问题,但是为了将代码的更改保持在最低限度,我说,只需执行以下操作:
function numberSearch(str) {
let sum = 0;
let strCount = 0;
if (str === "") {
return 0;
};
for (let i = 0; i < str.length; i++) {
if (isNaN(Number(str[i]))) {
strCount = strCount + 1; // if it's true, +1
} else {
sum = sum + Number(str[i]); // if it's a number
}
}
return Math.round(sum / strCount);
}
我可能会做一些与原始代码稍有不同的事情,找出有多少个数字,然后从中开始工作 函数编号ARCHSTR{ 如果!str{ //空或空的提前退出 返回0; } //获取所有字符,过滤非数字 const numbers=str.split.filter v=>!isNaNNumberv; //将所有数字映射到数字,并将它们相加 const sum=numbers.map Number.reduce agg,item=>agg+item,0; //将总和除以字符串的长度-找到的数字量 //但总是被至少1除,所以当只给出所有数字时,不会出现被0除的错误 返回Math.round sum/Math.max1,str.length-numbers.length; } 让输出=numberSearch'Hello6'; console.logoutput;//->1. 输出=数字搜索“你好,世界2”; console.logoutput;//->2. 输出=数字搜索'111111111'; console.logoutput;//->9 输出=数字搜索;
console.logoutput;你需要继续;在isNaNNumberstr[i]的if分支内,否则NaN数字仍然会求和。您的意思是for循环语句不再工作??不,只转到for语句中的下一个元素,而不执行下面的任何语句it@Icepickle非常感谢。你的小费是有效的!!但是我需要选择答案xdI添加了一个带有替代代码的选项,以及一个显示如何使用continue的选项:不,只需将continue放在strCount=strCount+1后面,然后就不需要else,返回Math.round只在循环完成后发生@冰泡菜很好吃。我做了一些修改,你认为第一个if是什么?如果使用continue if,则不需要else if分支branch@Icepickle我已经取出了continue,因为我想清楚地说明每个案例。@Loolii很高兴这有帮助这也是一个好方法,但它确实增加了更多的块,并且一旦更多的条件出现,就会变得非常混乱:@Icepickle我认为如果需要更多的条件,它们应该被重构成单独的函数。这是一个公平的选择:只需再进行一次测试Justin:numberSearch'111111'@Icepickle oof。好的,谢谢你的提示。你的建议非常正确!!非常感谢你的回答:你需要跳过总数中的那些是的,我会的:。我明白了,谢谢你的帮助:
function numberSearch(str) {
let sum = 0;
let strCount = 0;
if (str === "") {
return 0;
};
for (let i = 0; i < str.length; i++) {
if (isNaN(Number(str[i]))) {
strCount = strCount + 1; // if it's true, +1
} else {
sum = sum + Number(str[i]); // if it's a number
}
}
return Math.round(sum / strCount);
}