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

时间:2019-09-12 08:55:41

标签: javascript

说我正在创建一个将一些数字加在一起的函数,并且我想验证它们实际上都是数字。

我正在这样做:

function addNumbers(x, y) {     
    if (typeof x == 'number' || typeof y == 'number') {
        // do something..
    }        
}

如果我有两个以上的数字,这似乎不切实际。 什么是检查多个数字的更好方法?

5 个答案:

答案 0 :(得分:3)

您可以将它们放在数组中,并使用布尔标志使用Array.prototype.every来检查是否都是数字(并检查NaN,因为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);

答案 1 :(得分:1)

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

function addNumbers(...nums) {     
    return nums.reduce((sum, num) => sum + +num)
}
console.log(addNumbers(1, 2, "3", 4));

或者,如果您想跳过非数字(如果使用第一个代码段,则会产生NaN),只需在添加前检查类型,如果数字很好,否则请用{{ 1}}:

0

答案 2 :(得分:1)

我认为它的可读性更好,请使用Array.prototype.everyNumber.isIntegerArray.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, {});

答案 3 :(得分:0)

您可以将所有数字推入和数组,并在该数组上循环并添加它们。

let arr = [1,2,3,4]; #be it your array

function addNumbers(arr) {
let sum=0;
arr.map(item => {
if(typeof item === 'number') {
sum=sum+item;
}
else {
return item+' is not a number in given array';
}
return sum;
});

答案 4 :(得分:0)

如果性能不是这里的问题:

function testN(){
    if(!Array.from(arguments).every((d)=>typeof d === "number")){
        return;
    }
    console.log("pass");
    //do something;
}

用您想做的任何事情代替“做某事”。 可以使用否定的“某些”方法,该方法会更早终止。任何适合您的。