为何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
相关产品推荐
相关产品推荐

