【问题标题】:Average Calculator for an Array (null arguments returns NaN)数组的平均计算器(空参数返回 NaN)
【发布时间】:2020-05-14 15:55:23
【问题描述】:

对数组使用rest参数和for...of循环...

function average(...nums) {
    let total = 0;
    for(const num of nums) {
      total += num;
    }
    let avr = total / arguments.length;
    return avr;
}

console.log(average(2, 6));
console.log(average(2, 3, 3, 5, 7, 10));
console.log(average(7, 1432, 12, 13, 100));
// returns NaN - required to return 0. 
console.log(average());

问题:对于无参数 - console.log(average()); - 返回 NaN,其中正确答案必须为 0。

这里有什么好的速记解决方案吗?

【问题讨论】:

  • 在函数if (!arguments.length) return 0的第一行添加一个简单的检查。
  • if (nums.length === 0) return 0; 并在计算平均值时使用nums.length 而不是arguments.length。还不如使用 rest 参数来获得它的价值,对吧?
  • 也许还要确保 num 是一个实际数字,然后再将其添加到总数 if(!isNaN(num) { total += num; }
  • @norbitrial 谢谢。出色的解决方案,我的代码正在运行。

标签: javascript arrays for-loop ecmascript-6 es6-modules


【解决方案1】:

修改函数为-

function average(...nums) {
    if(nums.length === 0){
        return 0;
    }
    let total = 0;
    for(const num of nums) {
        total += num;
    }
    let avr = total / arguments.length;
    return avr;
}

【讨论】:

    【解决方案2】:

    你可以在函数的开头检查 arguments.length。比如:

    function average(...nums) {
        //check if no args are passed & return 0
        if(arguments.length === 0) return 0;
        //else
        let total = 0;
        for(const num of nums) {
        total += num;
        }
        let avr = total / arguments.length;
        return avr;
    }
    

    【讨论】:

      【解决方案3】:

      它不是很优雅但是......

      const average = (...arr) => arr.reduce( ( acc, current ) => acc + current, 0 ) / (arr.length || 1) ;
      
      console.log(average(2, 6));
      console.log(average(2, 3, 3, 5, 7, 10));
      console.log(average(7, 1432, 12, 13, 100));
      console.log(average());

      【讨论】:

        猜你喜欢
        • 2020-12-12
        • 1970-01-01
        • 2014-05-02
        • 2018-01-06
        • 1970-01-01
        • 1970-01-01
        • 2017-02-16
        • 1970-01-01
        • 2014-05-14
        相关资源
        最近更新 更多