我正在尝试编写代码,如果给出负数将返回undefined
我被要求使用Javascript中的函数计算矩形,三角形和圆形的面积。我说得对,但问题还显示“ 如果任何参数为负,则该函数应返回未定义的值。”
function calculateRectangleArea (length, width) {
return length * width;
}
function calculateTriangleArea (base, height) {
return (base * height)/2;
}
function calculateCircleArea (radius) {
return radius * radius * Math.PI;
}
我可以计算出正确的面积,但是如果要得到undefined
的值为负数,我就无法弄清楚该写些什么。是这样的:
if (calculateRectangleArea <0)
return "undefined";
答案 0 :(得分:4)
您需要在if
语句中测试每个参数,以确保它不是负数,如果有任何负数,则返回undefined
-否则,就像您已经在做的那样返回普通计算:
function calculateRectangleArea(length, width) {
if (length < 0 || width < 0) {
return undefined;
} else {
return length * width;
}
}
function calculateTriangleArea(base, height) {
if (base < 0 || height < 0) {
return undefined;
} else {
return (base * height) / 2;
}
}
function calculateCircleArea(radius) {
if (radius < 0) {
return undefined;
} else {
return radius * radius * Math.PI;
}
}
或者,由于不返回任何值时,默认情况下返回undefined
,因此,如果所有参数均为非负值,则也只能返回计算,例如:
function calculateRectangleArea(length, width) {
if (length >= 0 && width >= 0) {
return length * width;
}
}
答案 1 :(得分:3)
因为您希望在未定义任何任何个参数时发生,请在some
上使用[...arguments]
:
function calculateRectangleArea (length, width) {
if ([...arguments].some(e => e < 0)) return undefined;
return length * width;
}
对您的所有功能执行此操作。
答案 2 :(得分:1)
最简单,最易读的解决方案是在计算面积之前检查所有自变量是否为正,否则将返回undefined
。
例如(使用conditional operator):
function calculateRectangleArea (length, width) {
return length < 0 || width < 0 ? undefined: length * width;
}
function calculateTriangleArea (base, height) {
return base < 0 || height < 0 ? undefined : (base * height)/2;
}
function calculateCircleArea (radius) {
return radius < 0 ? undefined: radius * radius * Math.PI;
}
(注意:对于圈子,您可以使用exponential operator(如果支持)
由于您已为所有计算定义了通用模式,因此可以一概而论。
基本上,您可以定义“保护”,仅在参数为正数的情况下执行给定函数,否则将返回undefined
。尽管涉及参数和数学运算,但这种检查可以应用于所有计算。这是可能的,因为JS具有First-class functions。
下面的示例使用spread syntax和arrow function,但也可以使用常规函数来完成它们:
// Takes a function as argument and returns a function
// that will execute the function given only if all the arguments
// provided are positive, `undefined` otherwise:
const guard = fn => (...args) => args.some(arg => arg < 0) ? undefined : fn(...args);
const calculateRectangleArea = guard((length, width) => length * width);
const calculateTriangleArea = guard((base, height) => base * height /2);
const calculateCircleArea = guard(radius => radius ** 2 * Math.PI);
答案 3 :(得分:0)
您使用Math.abs()
检查整数或十进制是否为负。
该代码将函数定义为对象的属性,并将函数定义为
如果传递给函数的参数之一为负,则使用.find()
创建一个变量,该变量设置为undefined
const calculations = {
calculateRectangleArea (length, width) {
const n = this[Object.getOwnPropertySymbols(this)[0]](length, width)
return !n ? n : length * width
},
calculateTriangleArea (base, height) {
const n = this[Object.getOwnPropertySymbols(this)[0]](base, height)
return !n ? n : (base * height)/2
},
calculateCircleArea (radius) {
const n = this[Object.getOwnPropertySymbols(this)[0]](radius)
return !n ? n : radius * radius * Math.PI
},
[Symbol('filter')](...props) {
const n = props.find(n => Math.abs(n) !== n)
// if `n` is not `undefined` `return` `void 0` else return `true`
console.log(!n)
return n !== undefined ? void 0 : !n
}
}
console.log(
calculations.calculateRectangleArea(0, 0) // `0`
, calculations.calculateTriangleArea(1, 2) // `1`
, calculations.calculateCircleArea(-2, 1) // `undefined`
)
答案 4 :(得分:0)
我只是想感谢您提供的所有帮助!我设法解决了这个问题,但是让这个社区愿意介入并提供帮助确实很有帮助!我希望有一天我会好起来以回馈青睐。
谢谢!