JavaScript arguments对象求数组最小值返回0而非-1问题求解
问题原因分析
共有两个核心错误导致输出不符合预期:
- 错误1:
arguments对象存储的是传入函数的所有参数集合,你调用findMin(data)时仅传入了1个参数(整个data数组对象),所以for (let n of arguments)遍历的是[data数组],循环拿到的n是完整数组而非数组内的单个元素。数组和数字0做大小比较时会隐式转换为NaN,NaN < 0的判定结果为false,因此min变量始终不会被更新。 - 错误2:最小值初始化值设置不合理。就算数组正确传入遍历,如果数组所有元素都大于0,最终返回的还是初始值0,依然无法得到正确结果。
修复方案
提供两种常见的正确写法:
写法1:直接接收数组参数遍历
let data = [2,3,4,2,6,7,8,9,-1,7,6,4,3] function findMin(arr) { // 初始值设为数组第一个元素,避免初始值干扰结果 let min = arr[0] for (let n of arr) { if(n < min) { min = n } } return min } const smallNumber = findMin(data) console.log(smallNumber) // 输出-1
写法2:保留arguments逻辑,调用时展开数组
let data = [2,3,4,2,6,7,8,9,-1,7,6,4,3] function findMin() { // 初始值设为正无穷,保证第一个传入的数字一定会覆盖初始值 let min = Infinity for (let n of arguments) { if(n < min) { min = n } } return min } // 用展开运算符把数组元素拆为单个参数传入 const smallNumber = findMin(...data) console.log(smallNumber) // 输出-1
内容的提问来源于stack exchange,提问作者Sreejith Thrivikraman
相关产品推荐
相关产品推荐

