我想要实现的是在数组中找到最小的数字及其初始位置。这是一个应该做什么的例子:
temp = new Array();
temp[0] = 43;
temp[1] = 3;
temp[2] = 23;
所以最后我应该知道第 3 位和第 1 位。我也看过这里:从 Javascript 中的数组中获取最小值?,但是这种方式并没有给我在数组中的数字位置。感谢任何提示或代码片段。
我想要实现的是在数组中找到最小的数字及其初始位置。这是一个应该做什么的例子:
temp = new Array();
temp[0] = 43;
temp[1] = 3;
temp[2] = 23;
所以最后我应该知道第 3 位和第 1 位。我也看过这里:从 Javascript 中的数组中获取最小值?,但是这种方式并没有给我在数组中的数字位置。感谢任何提示或代码片段。
只需遍历数组并查找最小的数字:
var index = 0;
var value = temp[0];
for (var i = 1; i < temp.length; i++) {
if (temp[i] < value) {
value = temp[i];
index = i;
}
}
现在value
包含最小值,并index
包含数组中存在此类值的最低索引。
你想用indexOf
http://www.w3schools.com/jsref/jsref_indexof_array.asp
使用您之前拥有的代码,来自另一个问题:
temp = new Array();
temp[0] = 43;
temp[1] = 3;
temp[2] = 23;
Array.min = function( array ){
return Math.min.apply( Math, array );
};
var value = temp.min;
var key = temp.indexOf(value);
单线:
alist=[5,6,3,8,2]
idx=alist.indexOf(Math.min.apply(null,alist))
请参阅此问题的“查找最大值”版本的答案。它既简单又好。之后您可以使用索引来获取元素。
您可以使用 reduce,并与Infinity
.
let minIndex = -1;
arr.reduce((acc, curr, index) => {
if (curr < acc) {
minIndex = index;
return curr;
} else {
return acc;
}
}, Infinity);
Math.min
使用和 展开运算符求最小值:
var minimumValue = Math.min(...temp);
然后使用以下方法查找索引indexOf
:
var minimumValueIndex = temp.indexOf(minimumValue);
我个人更喜欢扩展运算符而不是apply
.
这是使用简单递归的解决方案。输出是一个包含最小数的索引位置和最小数本身的对象
const findMinIndex = (arr, min, minIndex, i) => {
if (arr.length === i) return {minIndex, min};
if (arr[i] < min) {
min = arr[i]
minIndex = i;
}
return findMinIndex(arr, min, minIndex, ++i)
}
const arr = [5, 5, 22, 11, 6, 7, 9, 22];
const minIndex = findMinIndex(arr, arr[0], 0, 0)
console.log(minIndex);