JavaScript高阶函数异常:输入小于4时返回5个元素而非3个
问题分析:疼痛管理函数返回结果不符合预期
当输入小于4的疼痛等级(如示例中的2)时,预期返回包含3个元素的数组,实际却得到5个元素,核心问题出在条件判断的写法错误。
错误原因
JavaScript不支持像3 < painLevel <7或0 < painLevel <4这种连续比较的语法,这种写法会被拆解为两步独立运算:
- 以
3 < 2 <7为例,先计算3 < 2得到布尔值false,再将false转为数字0后计算0 <7,结果为true。 - 因此输入painLevel=2时,会错误进入第二个
else if分支,返回actionPlan.slice(0,5),导致得到5个元素。
修正后的代码
将连续比较改为用&&连接的逻辑与条件,确保范围判断准确:
let actionPlan = ['1. Oatmeal bath', '2. Drink 16 oz water', '3. Put on 100% cotton shorts', '4. Butterfly pose', '5. Pigeon Pose', '6. Lidocaine gel', '7. 200 mg pyridium' ]; function painManagement (painLevel) { if (painLevel >= 7) { return function () { return actionPlan; } } else if (painLevel > 3 && painLevel < 7) { return function () { return actionPlan.slice(0,5); } } else if (painLevel > 0 && painLevel < 4) { return function () { return actionPlan.slice(0,3); } } else if (painLevel === 0) { return 'Hooray, no pain!'; } } console.log(painManagement(2)()); // 输出:(3) ['1. Oatmeal bath', '2. Drink 16 oz water', '3. Put on 100% cotton shorts']
内容的提问来源于stack exchange,提问作者help
相关产品推荐
相关产品推荐

