JavaScript从对象数组获取最值关联对象函数异常求助
问题排查与修复方案
核心问题分析
你的lowestValShoe和highestValShoe函数逻辑完全错误,导致最终都返回数组最后一个元素的名称(也就是'Fila'):
- 每次循环里调用
Math.min(shoeArray[i].valuePerItem)或Math.max(shoeArray[i].valuePerItem),本质上只是把当前单个鞋品的单价赋值给lowestVal/highestVal,根本没有和之前的值做比较 - 循环过程中每次都把当前鞋品的名字赋值给
shoe/shoe1,循环结束后自然只保留最后一个元素的名字
另外还有个潜在问题:你使用了未声明的全局变量i、lowestVal、shoe等,这会导致变量污染,容易引发其他bug。
修复后的代码
修复lowestValShoe函数
function lowestValShoe(shoeArray) { // 初始化最低值为数组第一个元素的单价,对应鞋名也初始化为第一个元素的名字 let lowestVal = shoeArray[0].valuePerItem; let shoe = shoeArray[0].name; // 从第二个元素开始遍历比较 for (let i = 1; i < shoeArray.length; i++) { if (shoeArray[i].valuePerItem < lowestVal) { lowestVal = shoeArray[i].valuePerItem; shoe = shoeArray[i].name; } } return shoe; }
修复highestValShoe函数
function highestValShoe(shoeArray) { let highestVal = shoeArray[0].valuePerItem; let shoe1 = shoeArray[0].name; for (let i = 1; i < shoeArray.length; i++) { if (shoeArray[i].valuePerItem > highestVal) { highestVal = shoeArray[i].valuePerItem; shoe1 = shoeArray[i].name; } } return shoe1; }
额外优化:避免全局变量污染
你的searchShoes函数里的i也是全局变量,建议改成局部变量:
function searchShoes(shoeName, shoeArray) { // 用let声明i,变成函数内的局部变量 for (let i = 0; i < shoeArray.length; i++) { if (shoeArray[i].name === shoeName) { return shoeArray[i]; } } }
验证结果
修复后调用函数:
lowestValShoe(shoeArray)会返回'Fila'(因为它单价45.0确实是最低)highestValShoe(shoeArray)会返回'Nike'(单价165.0是最高)
内容的提问来源于stack exchange,提问作者Laura
相关产品推荐
相关产品推荐

