Skip to content

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