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

为何Math.max结合filter无法正确提取嵌套数组的最大值?

问题原因与解决方法

为什么代码返回原数组?

filter 方法的核心作用是筛选数组元素,它会依据回调函数返回的布尔值(true/false)决定是否保留当前元素。你写的 Math.max(...triangle) 会返回当前嵌套数组的最大值,而你的所有嵌套数组里的数都是正数——正数在布尔判断语境中会被认定为 true,所以每个元素都被保留下来,最终直接返回了原数组。

正确实现方式

你想要的是把每个嵌套数组转换为它的最大值,这个需求应该用 map 方法(专门用于数组元素的转换),而非 filter。修改后的代码如下:

const triangles = [
      [6, 7, 10],
      [9, 3, 6],
      [6, 3, 5],
      [6, 13, 12],
      [7, 12, 8],
    ];

function test(triangles){
    return triangles.map(triangle => Math.max(...triangle));
}

console.log(test(triangles)); // 输出: [10, 9, 6, 13, 12]

补充说明

  • 如果你的嵌套数组可能包含负数或0,Math.max 返回的结果若是0或负数,在 filter 里会被视为 false,这时候才会过滤掉对应的数组,但这显然不是你想要的逻辑。
  • map 方法会遍历数组的每个元素,将回调返回的新值组成新数组返回,完全匹配你“返回包含每个嵌套数组最大值的新数组”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:40:35