如何求数组中第二大数的平方?JavaScript代码遇NaN问题求助
问题原因分析
你遇到的问题根源在于用Set去重后,当输入数组所有元素都相同时,去重后的数组只有一个元素。比如[1,1]去重后变成[1],此时取索引1的元素自然是undefined,用Math.pow计算平方就会得到NaN。而你的需求里这种情况应该返回这个重复元素的平方,原代码没考虑到去重后数组长度不足2的场景。
解决方案
方案一:保留重复元素,直接遍历找第二大值
这种方法不用去重,更贴合“第二大”的实际语义(当所有元素相同时,第二大就是这个元素本身):
var maxArea = function(height) { const maxVal = Math.max(...height); // 初始化第二大值为负无穷,遍历数组找小于等于maxVal的最大值 let secondMax = -Infinity; for (const num of height) { if (num <= maxVal && num > secondMax) { secondMax = num; } } // 如果所有元素都是maxVal,secondMax会等于maxVal return Math.pow(secondMax, 2); };
方案二:改进原有的去重逻辑
如果你还是想用Set去重的思路,只需要加个判断,当去重后的数组长度小于2时,直接取唯一的元素即可:
var maxArea = function(height) { const uniqueArr = Array.from(new Set(height)).sort((a, b) => b - a); const secondLargest = uniqueArr.length >= 2 ? uniqueArr[1] : uniqueArr[0]; return Math.pow(secondLargest, 2); };
测试验证:
- 输入
[1,8,6,2,5,4,8,3,7],两种方案都返回49; - 输入
[1,1],两种方案都返回1。
内容的提问来源于stack exchange,提问作者elborracho420
相关产品推荐
相关产品推荐

