【问题标题】: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) => acc+n) / nums.length; 替换为 return nums.reduce((acc,n) => 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))