如何对含数值与字符串的数组排序并获取最小值?
解决数组混合数字与字符串的排序及最小值获取问题
你的代码问题在于:当sort函数比较数字和字符串"NotFound"时,a-b会返回NaN,导致排序逻辑失效,无法得到预期的顺序。以下是两种可行的解决方案:
方案1:直接获取最小值(更高效,若仅需最小值可优先用)
先过滤出数组中的数字元素,再通过Math.min直接获取最小值:
var urunAdi = [350, 456, "NotFound"]; // 筛选出所有数字类型的元素 const validNumbers = urunAdi.filter(item => typeof item === 'number'); var lowestPrice = Math.min(...validNumbers); // 结果为350
方案2:对整个数组按预期排序
修改sort的比较函数,区分数字和字符串类型,确保数字升序排列在前,字符串在后:
var urunAdi = [350, 456, "NotFound"]; urunAdi.sort(function(a, b) { const isANumber = typeof a === 'number'; const isBNumber = typeof b === 'number'; if (isANumber && isBNumber) { return a - b; // 数字之间按升序比较 } // 数字永远排在字符串前面 return isANumber ? -1 : 1; }); // 排序后数组为 [350, 456, "NotFound"] var lowestPrice = urunAdi[0]; // 结果为350
内容的提问来源于stack exchange,提问作者gurmework
相关产品推荐
相关产品推荐

