JavaScript中获取数组最值遇问题:Math.max方法失效求助
解决Math.max无法获取数组最值的问题
可能的问题及修复方案
1. 数据类型不匹配:price是字符串而非数字
如果data[i].price是字符串格式的数值,Math.max会返回NaN——因为它无法直接处理字符串类型的参数。修复时只需在存入数组前转换为数字:
let prices = []; // 避免用Array作为变量名,和内置构造函数冲突 jQuery.getJSON("price.json", function(data) { for (let i = 0; i < data.length; i++) { // 转换为浮点数,确保是数字类型 prices.push(parseFloat(data[i].price)); } let maximum = Math.max(...prices); console.log(maximum); // 此时可正常获取最大值 });
2. 异步执行顺序问题
jQuery.getJSON是异步操作,如果你在回调函数外部尝试访问prices或maximum,此时数组还未被填充,自然无法得到正确结果。所有依赖该数组的操作必须放在回调函数内部,也可以改用更现代的Promise风格写法:
async function getMaxPrice() { let prices = []; const data = await jQuery.getJSON("price.json").promise(); for (let item of data) { prices.push(parseFloat(item.price)); } let maximum = Math.max(...prices); console.log(maximum); return maximum; } // 调用函数获取结果 getMaxPrice();
3. 边界情况处理:数组为空
如果JSON数据为空或没有price字段,数组会是空的,Math.max(...[])会返回-Infinity。可以添加判断避免异常:
let maximum = prices.length > 0 ? Math.max(...prices) : null;
内容的提问来源于stack exchange,提问作者J.K
相关产品推荐
相关产品推荐

