为何console.log(largest)输出9而非15?循环仅遍历至索引3?
问题原因与修复方案
你的代码里存在典型的类型错误:拆分字符串得到的数组元素是字符串类型,而非数字类型。字符串之间的比较是按字符的ASCII码逐位进行的,比如"10"和"9"对比时,第一个字符'1'的ASCII码小于'9',会被判定为"10" < "9";同理"15"和"9"对比时,也是"15" < "9",所以循环里不会更新最大值,最终输出"9"。
修复方法有两种:
- 拆分后直接将数组转为数字数组
let userInput = [6, '1 6 7 9 10 15']; // 拆分后用map转成数字类型 let arr = userInput[1].split(" ").map(Number); let largest = arr[0]; console.log(arr); for (let i = 1; i < arr.length; i++) { if (arr[i] > largest) { largest = arr[i]; } } console.log(largest); // 输出15
- 在比较时临时将字符串转为数字
let userInput = [6, '1 6 7 9 10 15']; let arr = userInput[1].split(" "); // 初始值就转成数字 let largest = Number(arr[0]); console.log(arr); for (let i = 1; i < arr.length; i++) { // 每次比较前转数字 if (Number(arr[i]) > largest) { largest = Number(arr[i]); } } console.log(largest); // 输出15
更简洁的写法
如果不需要遍历过程,直接用Math.max可以一步得到最大值:
let userInput = [6, '1 6 7 9 10 15']; let largest = Math.max(...userInput[1].split(" ").map(Number)); console.log(largest); // 输出15
内容的提问来源于stack exchange,提问作者Joshua
相关产品推荐
相关产品推荐

