Javascript 我如何数数和计算它?(i使用isNaN()

Javascript 我如何数数和计算它?(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

我的代码如下。我使用的是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 设strCount=0 如果str=={ 返回0 }; 对于let i=0;i1. 输出=数字搜索“你好,世界2”;
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);
}