JavaScript数组的最小值和最大值
数字数组的最小值和最大值
在使用JavaScript的数字数组时,您可能需要找到最小值或最大值。幸运的是,JavaScript的内置对象Math
可以帮助您。您可以简单地使用Math.min()
或Math.max()
与展开运算符(...
)结合使用,因为这两个函数都接受任意数量的参数。
const nums = [2, 4, 6, 8, 1, 3, 5, 7];
Math.max(...nums); // 8
Math.min(...nums); // 1
数字数组的前n个最小值和最大值
如果您需要找到前n
个最小值或最大值,那也很简单。
对于这两个操作中的任何一个,我们首先需要将数组按升序或降序进行排序。可以使用Array.prototype.sort()
和适当的比较函数来完成此操作。然而,我们需要使用展开运算符(...
)创建数组的浅克隆,以避免改变原始数组。
然后,我们可以使用Array.prototype.slice()
来获取排序后数组的前n
个元素。如果未提供n
,则将返回数组的第一个元素。如果n
大于或等于数组的长度,则将返回原始数组。
const minN = (arr, n = 1) => [...arr].sort((a, b) => a - b).slice(0, n);
const maxN = (arr, n = 1) => [...arr].sort((a, b) => b - a).slice(0, n);
## 基于函数的数组的最小值和最大值
对于更复杂的情况,例如在**对象数组**中查找最小/最大值,您需要使用`Array.prototype.map()`。通过提供一个**适当的函数**或**属性名称**,您可以将数组映射为一个值数组,然后使用上述相同的方法。
```js
const minBy = (arr, fn) =>
Math.min(...arr.map(typeof fn === 'function' ? fn : val => val[fn]));
const maxBy = (arr, fn) =>
Math.max(...arr.map(typeof fn === 'function' ? fn : val => val[fn]));
minBy([{ n: 4 }, { n: 2 }, { n: 8 }, { n: 6 }], x => x.n); // 2
minBy([{ n: 4 }, { n: 2 }, { n: 8 }, { n: 6 }], 'n'); // 2
maxBy([{ n: 4 }, { n: 2 }, { n: 8 }, { n: 6 }], x => x.n); // 8
maxBy([{ n: 4 }, { n: 2 }, { n: 8 }, { n: 6 }], 'n'); // 8