为何对原数组slice得到的子数组调用Math.max返回NaN?
问题原因与解决办法
你遇到的核心问题是对slice方法的返回值理解有误:
arr.slice(0, 1)返回的不是单个子数组,而是一个包含目标子数组的新数组。从你的测试结果就能验证这一点:arr1.length为1,arr1[0]才是你真正需要的[4, 5, 1, 3]。
当你调用Math.max(...arr1)时,展开的是arr1的元素——也就是那个子数组本身,而Math.max只能接收数字类型的参数,无法解析数组,因此返回NaN。
解决方法
- 直接获取子数组:如果只是取第一个子数组,不用
slice,直接通过索引访问更简单:
let arr = [[4, 5, 1, 3], [13, 27, 18, 26]]; let arr1 = arr[0]; Math.max(...arr1); // 输出5
- 修正slice的使用:如果一定要用
slice,需要额外取索引0拿到子数组:
let arr = [[4, 5, 1, 3], [13, 27, 18, 26]]; let arr1 = arr.slice(0, 1)[0]; Math.max(...arr1); // 输出5
- 批量处理所有子数组:如果要获取原数组中每个子数组的最大值,可以用
map遍历:
let arr = [[4, 5, 1, 3], [13, 27, 18, 26]]; let maxValues = arr.map(subArr => Math.max(...subArr)); console.log(maxValues); // 输出 [5, 27]
内容的提问来源于stack exchange,提问作者Tkhuu
相关产品推荐
相关产品推荐

