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);
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, {});
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"));
添加回答
举报