如何在JavaScript中查找数组最小值?基于现有最大值代码编写最小值函数
嘿,我来帮你解决这两个问题!
问题1:如何在JavaScript中查找数组的最小值?
在JS里找数组最小值有好几种实用方法,我给你列几个常用的:
使用
Math.min()展开运算符:这是最简洁的写法,不过要注意数组不能是空的(否则会返回Infinity)。const numbers = [3, 1, 4, 1, 5, 9]; const minValue = Math.min(...numbers); console.log(minValue); // 输出 1如果数组可能为空,可以加个默认值兜底:
const emptyArr = []; const minValue = emptyArr.length ? Math.min(...emptyArr) : 0; // 替换成你需要的默认值使用
Array.reduce()方法:这种方法灵活性很高,尤其适合处理对象数组(就像你第二个问题里的场景)。const numbers = [3, 1, 4, 1, 5, 9]; const minValue = numbers.reduce((prev, curr) => { return Math.min(prev, curr); }); console.log(minValue); // 输出 1传统for循环:兼容性拉满,适合老版本浏览器或者需要精细控制逻辑的场景:
const numbers = [3, 1, 4, 1, 5, 9]; let minValue = numbers[0]; for (let i = 1; i < numbers.length; i++) { if (numbers[i] < minValue) { minValue = numbers[i]; } } console.log(minValue); // 输出 1
问题2:给现有代码添加最小值计算函数
你已经写了hasMax方法来查找对象数组中指定属性的最大值,我们可以用几乎一致的逻辑来写hasMin,只需要把比较符号从>改成<就行。
修改后的完整代码如下:
var collection = []; $histogram.find('li').each(function() { collection.push($(this).data()); }); component.props.collection = collection; // 查找直方图最大值 collection.hasMax = function(value) { return this.reduce(function(prev, curr) { return prev[value] > curr[value] ? prev : curr; }); }; // 新增:查找直方图最小值 collection.hasMin = function(value) { return this.reduce(function(prev, curr) { return prev[value] < curr[value] ? prev : curr; }); }; // 赋值最大值 component.props.maxRange = collection.hasMax('value').value; // 赋值最小值 component.props.minRange = collection.hasMin('value').value;
简单解释下:hasMin里的reduce回调会逐个比较元素的value属性,如果前一个元素的value更小就保留它,否则返回当前元素。最后通过collection.hasMin('value').value就能拿到最小值的数值啦。
另外提个小优化:如果你的列表可能为空,最好给reduce加个初始值,避免报错:
// 优化后的hasMax,兼容空数组 collection.hasMax = function(value) { return this.reduce(function(prev, curr) { return prev[value] > curr[value] ? prev : curr; }, this[0]); // 用数组第一个元素做初始值 }; // 优化后的hasMin,兼容空数组 collection.hasMin = function(value) { return this.reduce(function(prev, curr) { return prev[value] < curr[value] ? prev : curr; }, this[0]); };
调用前记得先判断collection.length > 0,就不会有问题了。
内容的提问来源于stack exchange,提问作者randomuser1
相关产品推荐
相关产品推荐

