编写兼容单值与数组输入的JS翻倍函数结果异常如何解决
问题根源
你的代码逻辑存在重复计算+类型隐式转换错误:当入参为数组时,你已经通过map遍历将每个元素乘2得到了新数组,最后统一执行return value * 2时,JS会触发隐式类型转换,尝试将数组转为数字后做乘法,最终会返回NaN,完全不符合预期。
修复代码
只要调整返回逻辑,数组分支处理完直接返回即可,非数组类型再执行单值翻倍:
function double(value) { if (Array.isArray(value)) { return value.map(function(element) { return element * 2; }); } return value * 2; }
验证结果
- 调用
double(2)输出4,符合预期 - 调用
double([1, 2, 3])输出[2, 4, 6],符合预期
简化写法(ES6+)
如果你的运行环境支持ES6语法,可以用箭头函数和三元运算符简化代码:
const double = value => Array.isArray(value) ? value.map(el => el * 2) : value * 2;
内容的提问来源于stack exchange,提问作者ToldiReloaded
相关产品推荐
相关产品推荐

