发布于 2026-01-06 1 阅读
0

JavaScript 查找数组中数组的最小值/最大值。

JavaScript 查找数组中数组的最小值/最大值。

假设我们有一个用户数组,但每个用户本身也是一个数组。

例如,我们将使用以下数据。

const users = [
  ['Nicole', 31],
  ['Chris', 33],
  ['Yaatree', 2],
  ['Sanne', 29],
];
Enter fullscreen mode Exit fullscreen mode

如您所见,每个用户数组包含两个对象:

  • 用户名
  • 用户年龄

如何快速返回年龄最大的用户和年龄最小的用户?

我们一起来找出答案。

从数组的数组中找出最大值

首先,我们需要找到一种提取数据的方法,我认为这种reduce方法非常适合。

使用此方法的诀窍在于不要传递初始值。这样,我们就可以只从实际的元素数组开始计数。

const highest = users.reduce((previous, current) => {
  return current[1] > previous[1] ? current : previous;
});

console.log(highest);
// [ 'Chris', 33 ]
Enter fullscreen mode Exit fullscreen mode

我们来看看效果如何。

提醒一下,reduce 函数遍历数组中的每个元素需要两个参数。

  • 前值:之前的累计值
  • 当前项:当前循环项

然后,我们检查当前项的属性1(即年龄)是否大于上一项。
如果是,则返回当前项,因为它更大。否则,返回上一项的值。

在我们的循环中,它的工作方式如下:

  • 当前 = 妮可,不存在任何东西,所以妮可成为最高值
  • current = Chris,Chris 的年龄比 Nicole 大,所以 Chris 将成为返回值。
  • 当前值为 Yaatree,Chris 的值更高,因此继续返回 Chris 作为最高值。
  • 当前排名 = Sanne,Chris 的排名仍然更高,所以保留 Chris

最终,克里斯的价值最高。

从数组的数组中找出最小值

但是,如果我们采用同样的方法,但想找到一个更低的年龄呢?

我们可以使用相同的 reduce 函数,但交换箭头。

const lowest = users.reduce((previous, current) => {
  return current[1] < previous[1] ? current : previous;
});

console.log(lowest);
// [ 'Yaatree', 2 ]
Enter fullscreen mode Exit fullscreen mode

请注意,我们已将 切换><

为了更清楚地解释,以下是操作流程:

  • 当前值为妮可,不存在任何东西,所以妮可成为最低值
  • 当前值为 Chris,Nicole 的值较低,因此继续返回 Nicole 作为最低值。
  • current = Yaatree,Yaatree 较小,因此返回 Yaatree
  • current = Sanne,Yaatree 值较低,因此返回 Yaatree

结果是 Yaatree 的排名最低。

优化 reduce 方法

为了方便您阅读,我决定重新编写 reduce 函数。

然而,这是没有必要的,我们可以使用简写函数。

const highest = users.reduce((prev, cur) => (cur[1] > prev[1] ? cur : prev));

const lowest = users.reduce((prev, cur) => (cur[1] < prev[1] ? cur : prev));
Enter fullscreen mode Exit fullscreen mode

这段代码可能有点难读,但我们去掉了包裹的花括号,这样就省略了 return 语句,因为它们直接返回。

处理空数组

但如果数组为空会发生什么情况?

我们将收到以下错误:TypeError: Reduce of empty array with no initial value

这是因为我们没有给 reduce 方法提供初始值。
我们可以添加一个空null值作为回退值。

为了使 reduce 操作生效,我们还需要从前一个值开始评估;这样,另一个返回值始终是当前值。

const users = [];

const highest = users.reduce((previous, current) => {
  return previous?.[1] > current[1] ? previous : current;
}, null);

console.log(highest);
// null
Enter fullscreen mode Exit fullscreen mode

希望您喜欢这篇文章。欢迎在下面的 CodePen 示例中进行尝试。

感谢阅读,让我们保持联系!

感谢您阅读我的博客。欢迎订阅我的电子邮件简讯,也可以在FacebookTwitter上关注我。

文章来源:https://dev.to/dailydevtips1/javascript-find-minmax-from-array-of-arrays-1bkg