假设我正在创建一个函数来将一些数字相加,并且我想验证它们是否确实是数字。
我正在这样做:
function addNumbers(x, y) {
if (typeof x == 'number' || typeof y == 'number') {
// do something..
}
}
如果我有超过两个数字,使用此方法似乎不现实。有更好的方法来检查多个数字吗?
假设我正在创建一个函数来将一些数字相加,并且我想验证它们是否确实是数字。
我正在这样做:
function addNumbers(x, y) {
if (typeof x == 'number' || typeof y == 'number') {
// do something..
}
}
如果我有超过两个数字,使用此方法似乎不现实。有更好的方法来检查多个数字吗?
Array.prototype.every
(并检查 NaN
,因为 typeofNaN ==='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);
...args
可以解决这个问题。 - DjaouadNMisNaN([]) is false
. @DennisVash isNaN([])
是假的。 - DjaouadNM...
rest参数语法将输入作为数组获取,然后使用Array.prototype.reduce
对它们进行求和,同时您可以使用+
运算符将元素转换为数字并加起来:
function addNumbers(...nums) {
return nums.reduce((sum, num) => sum + +num)
}
console.log(addNumbers(1, 2, "3", 4));
或者,如果您想跳过非数字(使用第一个代码片段将生成NaN
),只需在添加之前检查类型,如果是数字,则可以继续,否则请用0
替换:
function addNumbers(...nums) {
return nums.reduce((sum, num) => sum + (!(typeof(num) === "number") ? 0 : +num));
}
console.log(addNumbers(1, 2, "3", 4, "non-number"));
NaN
。 - Ghassen LouhaichiArray.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, {});
Number.isInteger(5.2) 为 false
。 - DjaouadNMlet 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;
});
function testN(){
if(!Array.from(arguments).every((d)=>typeof d === "number")){
return;
}
console.log("pass");
//do something;
}
用任何你想做的东西替换“do something”。 可以使用否定的“some”方法,这样会更早地终止。选择适合你的。
addNumbers
函数。这样我们可以更快地帮助您。 - Ghassen Louhaichi