返回 JavaScript 数组中所有最小元素的索引数组


在 JavaScript 中,数组是一个单变量,可以存储不同的元素。这些元素存储在连续的内存位置。数组元素可以通过索引号访问。索引号从 0 开始。

语法

以下是 JavaScript 中数组的基本声明:

Cosnt cars = [Maruti, Hyundai, Honda];

我们需要返回 JavaScript 数组中所有最小元素的索引数组

让我们看看输入输出场景

假设有一个整数数组,其中最小元素重复多次。我们需要获取数组中最小元素的索引号。

Array = [10, 22, 30, 44, 10, 22, 30, 10, 10];
Output = [0, 4, 7, 8]

使用 Math.min() 函数

执行上述任务的一种方法是使用Math.min()函数、扩展运算符 (…)forEach方法。

Math.min()是 JavaScript 中一个静态的内置函数,它接受一系列值作为参数,并返回给定系列中的最小值。

<script>
   document.write(Math.min(23, 32, 441));
</script>

由于 23 是给定值中的最小值,因此此代码段会打印值 23(在浏览器上)。

但是,问题在于,如果您尝试将数组作为参数传递给 math.min() 方法,如下所示,它将返回NaN值。

<script>
   const array1 = [2, 3, 1];
   document.write(Math.min(array1));
</script>

我们可以借助扩展运算符 (…) 来解决这个问题。使用扩展运算符,我们可以将数组或字符串的元素扩展为一系列值。

  • 如果您使用扩展运算符将整数数组传递给math.min()方法,则返回给定数组的最小值。

  • JavaScript 的forEach()方法允许您对当前数组中的每个元素执行特定操作。

  • 要获取最小值(s)的索引号;使用forEach()方法将数组中的每个元素与最小值进行比较。如果匹配,则打印匹配元素的索引。

示例

以下是一个完整的示例,它返回数组最小值的索引:

<!DOCTYPE html> <html> <head> <title>Indexes if minimum elements in an array</title> </head> <body> <p id="para"> </p> <h2 id="demo"> </h2> <script> var string = ""; const array = [10, 20, 30, 10, 50, 10, 60, 70]; array.forEach(func); document.getElementById("para").innerHTML ="The indices of the elements present in array are: " + "<br>" +string; function func(curr_item, index_num) { string += index_num + ": " + curr_item + "<br>"; } function MinIndices(array) { var minimum = Math.min(...array); var Min_index = []; array.forEach(function(curr_item, index) { if (curr_item === minimum) { Min_index.push(index); } }); return Min_index; } document.getElementById("demo").innerHTML = "The indices of minimum elements in array are: " + MinIndices(array); </script> </body </html>

正如我们观察到的,上面程序的输入数组中的最小值是10,程序打印了值为 10 的元素的索引。

使用 apply() 方法

我们还可以使用Math.min()函数、apply()方法和forEach方法返回数组中最小元素的索引。

示例

以下是使用 apply() 方法、forEach方法和 Math.min() 函数的示例:

<!DOCTYPE html> <html> <head> <title>Indexes if minimum elements in an array</title> </head> <body> <p id="para"> </p> <h2 id="demo"> </h2> <script> var string = ""; const array = [1, 8, 9, 5, 23, 1, 34, 8, 5, 1, 9]; array.forEach(func); document.getElementById("para").innerHTML ="The indices of the elements present in array are: " + "<br>" +string; function func(curr_item, index_num) { string += index_num + ": " + curr_item + "<br>"; } function MinIndices(array) { var minimum = Math.min.apply(null, array); var Min_index = []; array.forEach(function(curr_item, index) { if (curr_item === minimum) { Min_index.push(index); } }); return Min_index; } document.getElementById("demo").innerHTML = "The indices of minimum elements in array are: " + MinIndices(array); </script> </body> </html>

在下面的输出中,最小元素是 1,它在数组中的三个索引处。因此,它打印数组中存在 1 的索引。

使用 reduce() 方法

reduce()方法接受一个回调函数(reducer)作为参数,并将此函数应用于当前数组的每个元素。通常,其结果将是一个单值。

以下代码演示了reduce()方法,在这里我们使用它来乘以数组的所有元素并返回结果。

const myArray = [21, 244, 3009, 4221];
const mul = myArray.reduce((pre, curr) => pre * curr, 1);
console.log(mul);

上述代码段的结果将是65079867636

示例

以下示例使用 reduce() 方法返回输入数组中所有最小元素的索引数组。

在这里,我们将Math.min()方法作为 reducer() 的操作传递,以便它将检索当前数组中元素的最小值。

<!DOCTYPE html> <html> <head> <title>Indexes if minimum elements in an array</title> </head> <body> <p id="para"> </p> <h2 id="demo"> </h2> <script> var string = ""; const array = [0, 7, 9, 10, 17, 18, 33, 45, 54, 99, 83, 0]; array.forEach(func); document.getElementById("para").innerHTML ="The indices of the elements present in array are: " + "<br>" +string; function func(curr_item, index_num) { string += index_num + ": " + curr_item + "<br>"; } const MinIndices = array => { const minimum = array.reduce((acc, val) => Math.min(acc, val), Infinity); const res = []; let i = 0; let len = array.length; for(i; i < len; i++){ if(array[i] !== minimum){ continue; }; res.push(i); }; return res; }; document.getElementById("demo").innerHTML ="The indices of minimum elements in array are: " + MinIndices(array); </script> </body> </html>

更新于:2022年9月22日

782 次浏览

启动您的职业生涯

完成课程获得认证

开始
广告