You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:25:15