返回 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>