遍历数组寻找最低low值:无需预设极值的替代实现方法
替代解决方案
下面是几种不需要初始化一个超大值来获取arrayvals中low属性最小值的方法:
方法1:提取所有low值后用Math.min
先通过map把数组中每个元素的low属性提取成新数组,再用扩展运算符配合Math.min直接获取最小值,代码简洁直观:
function main() { const WEEK_WEATHER = { monday: { low: 61, high: 75 }, tuesday: { low: 64, high: 77 }, wednesday: { low: 68, high: 80 }, thursday: { low: 64, high: 80 }, friday: { low: 68, high: 90 }, saturday: { low: 62, high: 81 }, sunday: { low: 70, high: 86 } }; const arrayvals = Object.values(WEEK_WEATHER); // 直接用Object.values简化数组创建 let day = 1; let highest = 0; // 提取所有low值并取最小 const lowest = Math.min(...arrayvals.map(item => item.low)); for (let i in arrayvals) { console.log(`Day: ${day++} | Low: ${arrayvals[i].low} | High: ${arrayvals[i].high}`); if (arrayvals[i].high > highest) { highest = arrayvals[i].high; } } console.log("Lowest: " + lowest + " | highest: " + highest); } main();
注:Object.values(WEEK_WEATHER)可以直接把对象的所有值转为数组,比手动解构更简洁,避免重复代码。
方法2:初始化lowest为数组第一个元素的low
如果能确定数组不为空,可以直接把lowest初始化为数组第一个元素的low值,再遍历数组进行比较:
function main() { const WEEK_WEATHER = { monday: { low: 61, high: 75 }, tuesday: { low: 64, high: 77 }, wednesday: { low: 68, high: 80 }, thursday: { low: 64, high: 80 }, friday: { low: 68, high: 90 }, saturday: { low: 62, high: 81 }, sunday: { low: 70, high: 86 } }; const arrayvals = Object.values(WEEK_WEATHER); let day = 1; let highest = arrayvals[0].high; // 最高值也可以用同样方式初始化 let lowest = arrayvals[0].low; // 初始化为第一个元素的low for (let i = 0; i < arrayvals.length; i++) { // 普通for循环更适合数组遍历 console.log(`Day: ${day++} | Low: ${arrayvals[i].low} | High: ${arrayvals[i].high}`); if (arrayvals[i].low < lowest) { lowest = arrayvals[i].low; } if (arrayvals[i].high > highest) { highest = arrayvals[i].high; } } console.log("Lowest: " + lowest + " | highest: " + highest); } main();
注:如果数组可能为空,需要先判断arrayvals.length > 0再初始化,避免读取arrayvals[0]时报错。
方法3:用reduce方法计算最小值
reduce方法可以遍历数组并累积计算结果,适合这类求极值的场景:
function main() { const WEEK_WEATHER = { monday: { low: 61, high: 75 }, tuesday: { low: 64, high: 77 }, wednesday: { low: 68, high: 80 }, thursday: { low: 64, high: 80 }, friday: { low: 68, high: 90 }, saturday: { low: 62, high: 81 }, sunday: { low: 70, high: 86 } }; const arrayvals = Object.values(WEEK_WEATHER); let day = 1; let highest = 0; // 用reduce迭代获取最小low值 const lowest = arrayvals.reduce((minVal, current) => { return current.low < minVal ? current.low : minVal; }, Infinity); // 用Infinity作为初始值,比固定数值更通用 for (let i in arrayvals) { console.log(`Day: ${day++} | Low: ${arrayvals[i].low} | High: ${arrayvals[i].high}`); if (arrayvals[i].high > highest) { highest = arrayvals[i].high; } } console.log("Lowest: " + lowest + " | highest: " + highest); } main();
注:Infinity表示无穷大,作为初始值适配所有可能的low数值;如果求最大值可以用-Infinity作为初始值。
内容的提问来源于stack exchange,提问作者user21514566
相关产品推荐
相关产品推荐

