📜  js 查找数组中的所有最大数索引 - Javascript (1)

📅  最后修改于: 2023-12-03 15:32:23.695000             🧑  作者: Mango

JS 查找数组中的所有最大数索引 - Javascript

在 JavaScript 中,我们经常需要查找数组中的最大值。但是,如果数组中有多个最大值,我们也需要找到它们的所有索引。本文将介绍如何使用 JavaScript 查找数组中的所有最大数索引。

方法一:使用 Math.max() 和 for 循环

使用 Math.max() 函数可轻松找到数组中的最大值。但是,如果数组中有多个最大值,此方法无法找到它们的索引。我们可以使用 for 循环来解决这个问题。代码如下:

function findAllMaxIndex(arr) {
  var max = -Infinity;
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] > max) {
      max = arr[i];
    }
  }
  var result = [];
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] === max) {
      result.push(i);
    }
  }
  return result;
}

我们先用 for 循环查找最大值,然后遍历整个数组,将所有最大值的索引推入结果数组中。该函数返回一个包含所有最大值索引的数组。

方法二:使用 reduce() 和箭头函数

我们可以使用 reduce() 和箭头函数来查找数组中所有的最大值。代码如下:

const findAllMaxIndex = (arr) =>
  arr.reduce(
    (result, val, idx) =>
      val > arr[result[0]] ? [idx] : val === arr[result[0]] ? [...result, idx] : result,
    [0]
  ).slice(1);

这行代码看起来很难理解,我们来逐步分解一下。

首先,我们使用箭头函数作为 reduce() 的回调函数。该函数接收两个参数:result 和 val。

  • result 是我们的结果数组,初始值为 [0]。
  • val 是当前元素。

该函数返回一个新的结果数组。在该函数中,我们使用了一些运算符和数组方法:

  • 如果 val 大于 arr[result[0]],我们将结果数组更新为 [idx],因为该元素是新的最大值。
  • 如果它们相等,我们将该元素的索引推入结果数组。
  • 否则,我们保持结果数组不变。

最后,我们使用 slice() 将第一个元素去掉,该元素只是初始化结果数组 [0]。

无论你选择哪种方法,它们都能有效地查找给定数组中所有的最大值索引。

结论

本文介绍了两种查找数组中所有最大值的方法。在这些方法中,我们都使用了 JavaScript 数组的常用方法和特性,例如 for 循环、reduce() 和箭头函数。使用这些方法只需很少的代码,即可找到数组中所有的最大值索引。