【问题标题】:How to return only numeric values?如何只返回数值?
【发布时间】:2022-01-03 11:04:17
【问题描述】:

我正在尝试返回平均值。我怎样才能只得到数字而忽略 false,“str”?

function average2 () {
    console.log (`arguments passed: ${arguments.length}`)
    console.log("All arguments:");
    let sum = 0;
    let numOnly = arguments.match(/\d+/)[0]
    for (let i= 0; i < arguments.length; i++) {
        sum += arguments[i]
    }
    return (sum) / arguments.length
}
console.log (average2 (5, 6, false, "str", 100))

【问题讨论】:

标签: javascript function for-loop numbers average


【解决方案1】:

您可以使用typeof 运算符过滤数字,如下所示:

function average (...params) {
    const nums = params.filter(n => typeof n == 'number');
    return nums.reduce((acc,n) => acc+n) / nums.length;
}
console.log (average (5, 6, false, "str", 7))

在这个例子中我只是计算了 nums 的平均值,如果你想根据参数长度计算平均值,你可以将 return nums.reduce((acc,n) =&gt; acc+n) / nums.length; 替换为 return nums.reduce((acc,n) =&gt; acc+n) / params.length;

【讨论】:

    【解决方案2】:

    你可以用这个:

    function average() {
        const numericArgs = [...arguments].filter(x => typeof x === 'number');
        return numericArgs.reduce((a, b) => a + b, 0) / numericArgs.length;
    }
    

    你可以使用这个:

    function average(...args) {
        const numericArgs = args.filter(x => typeof x === 'number');
        return numericArgs.reduce((a, b) => a + b, 0) / numericArgs.length;
    }
    

    【讨论】:

      【解决方案3】:

      在添加之前添加一个类型检查:

      function average2 () {
          let sum = 0;
          for (let i= 0; i < arguments.length; i++) {
            if(typeof arguments[i] === "number"){
              sum += arguments[i]
            }
          }
          return (sum) / arguments.length
      }
      console.log (average2 (5, 6, false, "str", 100))

      【讨论】:

        猜你喜欢
        • 2021-01-26
        • 1970-01-01
        • 2014-01-03
        • 2018-08-28
        • 2021-08-09
        • 1970-01-01
        • 1970-01-01
        • 2023-02-10
        • 1970-01-01
        相关资源
        最近更新 更多