Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正在检查数组中可成功转换为数字的字符串数_Javascript_Arrays_Loops_Comparison_Nan - Fatal编程技术网

Javascript 正在检查数组中可成功转换为数字的字符串数

Javascript 正在检查数组中可成功转换为数字的字符串数,javascript,arrays,loops,comparison,nan,Javascript,Arrays,Loops,Comparison,Nan,以下是我正在执行的任务的描述: 编写一个名为countNumbers的函数,该函数接受字符串数组。函数应返回数组中可成功转换为数字的字符串数的计数。例如,字符串“1”可以成功转换为数字1,但字符串“hello”不能转换为数字 countNumbers(['a','b','3','awesome','4']); // 2 countNumbers(['32', '55', 'awesome', 'test', '100']); // 3 countNumbers([]); // 0 countNu

以下是我正在执行的任务的描述:

编写一个名为countNumbers的函数,该函数接受字符串数组。函数应返回数组中可成功转换为数字的字符串数的计数。例如,字符串“1”可以成功转换为数字1,但字符串“hello”不能转换为数字

countNumbers(['a','b','3','awesome','4']); // 2
countNumbers(['32', '55', 'awesome', 'test', '100']); // 3
countNumbers([]); // 0
countNumbers(['4','1','0','NaN']); // 3
countNumbers(['7', '12', 'a', '', '6', '8', ' ']); // 4
我的代码:

function countNumbers(arr) {
    var count = 0;
    for (num in arr) {
        if (Number(arr[num]) !== NaN) {
            count++;
        }
    }
    return count;
}
当我使用控制台log(Number(arr[num])时,我确实在控制台中看到了NaN,但是当我在循环中进行比较时,count变量不会增加,最终返回的值等于数组的长度


任何关于我可能做错了什么或我忽略了什么的提示都非常感谢。

两件事直截了当:

  • 循环
  • 变量
  • 使用循环和变量解决问题时,现在有两个问题

    删除内联
    控制台。log
    以将实际计数作为数字返回

    countNumbers(['a','b','3','awesome','4']); // 2
    countNumbers(['32', '55', 'awesome', 'test', '100']); // 3
    countNumbers([]); // 0
    countNumbers(['4','1','0','NaN']); // 3
    countNumbers(['7', '12', 'a', '', '6', '8', ' ']); // 4
    
    可能会有更详尽或更智能的检查,但您可以轻松地修改
    isNum
    函数,而无需触摸任何其他代码

    无循环、无变量和关注点分离-isNum逻辑不与控制流混合

    更新:Alex的答案中的
    parseFloat
    检查是您正在寻找的更智能的检查

    const isNum=maybeNum=>(typeof maybeNum=='number'| | typeof+maybeNum=='number')&&&!isNaN(+maybeNum)&&maybeNum!='&&maybeNum!='
    const countNumbers=arr=>console.log(arr.filter(isNum).length)
    countnumber(['a','b','3','awesome','4']);//2
    countnumber(['32','55','awesome','test','100']);//3
    countNumbers([]);//0
    countNumbers(['4','1','0','NaN']);//3
    
    countNumbers(['7','12','a','6','8','');/4
    两件事直截了当:

  • 循环
  • 变量
  • 使用循环和变量解决问题时,现在有两个问题

    删除内联
    控制台。log
    以将实际计数作为数字返回

    countNumbers(['a','b','3','awesome','4']); // 2
    countNumbers(['32', '55', 'awesome', 'test', '100']); // 3
    countNumbers([]); // 0
    countNumbers(['4','1','0','NaN']); // 3
    countNumbers(['7', '12', 'a', '', '6', '8', ' ']); // 4
    
    可能会有更详尽或更智能的检查,但您可以轻松地修改
    isNum
    函数,而无需触摸任何其他代码

    无循环、无变量和关注点分离-isNum逻辑不与控制流混合

    更新:Alex的答案中的
    parseFloat
    检查是您正在寻找的更智能的检查

    const isNum=maybeNum=>(typeof maybeNum=='number'| | typeof+maybeNum=='number')&&&!isNaN(+maybeNum)&&maybeNum!='&&maybeNum!='
    const countNumbers=arr=>console.log(arr.filter(isNum).length)
    countnumber(['a','b','3','awesome','4']);//2
    countnumber(['32','55','awesome','test','100']);//3
    countNumbers([]);//0
    countNumbers(['4','1','0','NaN']);//3
    
    countNumbers(['7','12','a','6','8','');/4
    对其进行缩减并计算边缘情况

    console.log(countnumber(['a','b','3','awesome','4']);//2
    log(countnumber(['32','55','awesome','test','100']);//3
    console.log(countnumber([]);//0
    log(countnumber(['4','1','0','NaN');//3
    log(countNumbers(['7','12','a','6','8','');//4
    函数CountNumber(数组字符串){
    返回arrayStrings.reduce((count,string)=>isNaN(string)| | string.trim()==''count:count+1,0)
    
    }
    减少覆盖范围并评估边缘情况

    console.log(countnumber(['a','b','3','awesome','4']);//2
    log(countnumber(['32','55','awesome','test','100']);//3
    console.log(countnumber([]);//0
    log(countnumber(['4','1','0','NaN');//3
    log(countNumbers(['7','12','a','6','8','');//4
    函数CountNumber(数组字符串){
    返回arrayStrings.reduce((count,string)=>isNaN(string)| | string.trim()==''count:count+1,0)
    }
    您可以使用过滤并获取长度

    函数countNumbers(数组){
    返回数组.filter(isFinite).length;
    }
    log(countnumber(['a','b','3','awesome','4']);//2
    log(countnumber(['32','55','awesome','test','100']);//3
    console.log(countnumber([]);//0
    log(countnumber(['4','1','0','NaN');//3
    log(countNumbers(['7','12','a',''6','8','');/4,现在是6
    您可以使用它进行筛选并获取长度

    函数countNumbers(数组){
    返回数组.filter(isFinite).length;
    }
    log(countnumber(['a','b','3','awesome','4']);//2
    log(countnumber(['32','55','awesome','test','100']);//3
    console.log(countnumber([]);//0
    log(countnumber(['4','1','0','NaN');//3
    
    log(countNumbers(['7','12','a',''6','8','');/4,现在是6
    我认为使用
    reduce
    可以做到这一点

    const countNumbers=arr=>{
    返回arr.reduce((acc,value)=>isNaN(Number(value))?acc:acc+1,0)
    }
    const num=countNumbers(['a','b','3','awesome','4']);
    
    console.log(num)
    我认为使用
    reduce
    可以做到这一点

    const countNumbers=arr=>{
    返回arr.reduce((acc,value)=>isNaN(Number(value))?acc:acc+1,0)
    }
    const num=countNumbers(['a','b','3','awesome','4']);
    
    log(num)
    过滤数组并获取其长度

    console.log(countnumber(['a','b','3','woody','4']);//2
    log(countnumber(['32','55','awesome','test','100']);//3
    console.log(countnumber([]);//0
    log(countNumbers(['4','1','0','NaN']);//3
    log(countNumbers(['7','12','a','6','8','');//4
    函数计数编号(arr){
    返回阵列过滤器(功能(el){
    返回浮点数(el)=el;
    }).长度;
    
    }
    过滤数组并获取其长度

    console.log(countnumber(['a','b','3','awesome','4']);//2
    控制台
    
    function countNumbers(array) {
        let count = 0
        for (number of array) {
          if(typeof number === 'number') {
            count++
          } else if(typeof number === 'string') {
            let isNumber
            let numberCharacters = number.split('')
            const numberRegularExpression = new RegExp(/[0-9]/)
            for(character of numberCharacters) {
              if(numberRegularExpression.test(character) !== true) {
                isNumber = false
                break
              } else {
                isNumber = true
              }
            }
            if(isNumber === true) count++
          }
        }
        return count;
    }