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

JavaScript返回列表两个最高不同值 编写的错误代码如何修复

代码问题排查

你的原有代码存在以下几处错误:

  • 空数组无兼容处理:当输入空数组时,Math.max(...[])会返回-Infinity,最终返回结果为[-Infinity, -Infinity],和预期不符
  • 唯一值不足2的场景逻辑错误:例如输入[1,1,1],移除所有最大值后数组为空,再次调用Math.max(...[])还是返回-Infinity,最终结果为[1, -Infinity],不符合返回[1]的要求
  • 缺少剩余数组有效元素判断:没有判断移除最大值后的数组是否存在有效元素,直接拼接第二个最大值的逻辑,会引入无效值
正确实现方案

更简洁的实现思路是先做去重、再排序取前两位,代码如下:

function twoHighest (arr) {
  // Set去重后降序排序,截取前两位即可覆盖所有场景
  return [...new Set(arr)]
    .sort((a, b) => b - a)
    .slice(0, 2)
}

实现逻辑说明:

  • 用Set结构对原数组去重,直接得到所有唯一值,无需手动遍历删除重复的最大值
  • 对去重后的数组执行降序排序,天然满足输出结果从高到低的要求
  • slice(0,2)会自动适配数组长度:数组长度≥2时返回前两位最大值,长度为1时返回唯一的元素,为空时返回空数组,完全覆盖所有边界场景

内容的提问来源于stack exchange,提问作者Ghost6Fire

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:06:03