为了账号安全,请及时绑定邮箱和手机立即绑定

检查多个输入是否为数字类型

检查多个输入是否为数字类型

HUWWW 2021-10-14 12:54:05
假设我正在创建一个函数来将一些数字相加,我想验证它们实际上都是数字。我正在这样做:function addNumbers(x, y) {         if (typeof x == 'number' || typeof y == 'number') {        // do something..    }        }如果我有两个以上的数字,这似乎不切实际。检查多个数字的更好方法是什么?
查看完整描述

3 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

您可以将它们放在一个数组中并使用布尔标志来检查是否都是数字,使用Array.prototype.every(并检查NaNs,因为typeof NaN === 'number'):


function addNumbers(...args) {

  var all_numbers = args.every(a => typeof a == 'number' && !isNaN(a));

  if (all_numbers) {

    var sum = 0;

    args.forEach(n => sum += n);

    console.log(sum);

  } else {

    console.log('something is not right!');

  }

}


addNumbers(5, 6);

addNumbers(5, 6.2);

addNumbers(5, 6, NaN);

addNumbers(5, 6, []);

addNumbers(5, 6, {});

addNumbers(5, '6');

addNumbers('5', 6);


查看完整回答
反对 回复 2021-10-14
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

我认为它更易读的形式,使用Array.prototype.every,Number.isInteger和Array.prototype.reduce.


我不确定你想对错误做什么,所以我们只是记录它们(和结果);


// consider floating point

const isNumber = n => typeof n == 'number' && !isNaN(n)


const addNumbers = (...args) => {

  const isValid = args.every(isNumber);

  // const isValid = args.every(Number.isInteger);

  if (!isValid) {

    console.log('Error');

    return;

  }

  const sum = args.reduce((sum, curr) => sum + curr, 0);

  console.log(sum);

  return sum;

}


addNumbers(5, 6);

addNumbers(5, 6, NaN);

addNumbers(5, '6');

addNumbers('5', '6');

addNumbers('5', 6);

addNumbers(5.5, 6);

addNumbers(5.5, 6, 6.4, 65);

addNumbers(5.5, 6, {});


查看完整回答
反对 回复 2021-10-14
?
SMILET

TA贡献1796条经验 获得超4个赞

您可以使用...rest 参数语法将输入作为数组使用,然后使用Array.prototype.reduce对它们求和,同时您可以使用+运算符将元素转换为数字并将它们相加:


function addNumbers(...nums) {     

    return nums.reduce((sum, num) => sum + +num)

}

console.log(addNumbers(1, 2, "3", 4));

或者如果你想跳过非数字(NaN如果你使用第一个代码片段会产生)只需在添加之前检查类型,如果数字你很好,否则用 a 替换它0:


function addNumbers(...nums) {     

  return nums.reduce((sum, num) => sum + (!(typeof(num) === "number") ? 0 : +num));

}

console.log(addNumbers(1, 2, "3", 4, "non-number"));


查看完整回答
反对 回复 2021-10-14
  • 3 回答
  • 0 关注
  • 184 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信