JavaScript求和函数数组传参异常:返回错误字符串无法通过测试
解决求和函数兼容数组参数的问题
问题原因
当调用sum([7,11])时,剩余参数...numbers会把传入的数组作为单个元素存入numbers,此时numbers的值是[[7,11]]。遍历相加时,0 + [7,11]会触发JS的类型转换,数组被转为字符串"7,11",最终拼接成"07,11",而非数字求和。
解决方法
方法1:判断参数是否为数组
检查传入的参数,如果是单个数组,就直接使用该数组进行计算:
const sum = function(...numbers) { let nums = numbers; // 处理单个数组参数的情况 if (nums.length === 1 && Array.isArray(nums[0])) { nums = nums[0]; } let result = 0; for (let each of nums) { result += each; } return result; };
方法2:使用数组扁平化flat()
通过flat()方法将参数数组扁平化一层,同时兼容多参数和数组参数的场景:
const sum = function(...numbers) { let result = 0; // 扁平化参数数组,处理嵌套数组 for (let each of numbers.flat()) { result += each; } return result; };
两种方法都能让sum(7,11)和sum([7,11])都返回正确结果18,满足测试用例要求。
内容的提问来源于stack exchange,提问作者osvasas
相关产品推荐
相关产品推荐

