我知道您可以通过键入
来获得数组的最小值var min = Math.min.apply(null, array)
但这将返回数组的最小值,而不是此数组的id 例如,如果我有这些值:
array[1] = 24;
array[2] = 45;
我希望它返回1(持有最小值的ID)但是idk怎么做,有人可以帮我解决这个问题吗?
答案 0 :(得分:4)
var index = array.indexOf(Math.min.apply(null, array));
答案 1 :(得分:3)
您可以使用Array#reduce()
获取最小数字,同时在需要时避免数组中的漏洞。
array.reduce(function(obj, n, i) {
if (n < obj.min)
obj.i = i;
return obj;
}, {min:Infinity,i:-1}).i;
如果性能和兼容性是一个问题,你可以循环。
var res = -1;
var min = Infinity;
for (var i = 0; i < array.length; i++) {
if ((i in array) && array[i] < min) {
min = array[i];
res = i;
}
}
答案 2 :(得分:2)
你可以这样做:
var id = array.indexOf(Math.min.apply(null, array));
答案 3 :(得分:0)
获得该值后,您可以使用indexOf
获取索引,如下所示:
var index = array.indexOf(Math.min.apply(null, array));
你应该知道indexOf
最近才被包含在JavaScript中(确切地说是ES5 / JS 1.6)所以如果函数不存在,你可能想找到一些包装器。
有关详细信息,请参阅MDN(其中包含向后兼容函数的示例实现)。
答案 4 :(得分:0)
就像找到最小值的算法一样,但你必须跟踪最小索引
function minIndex(arr) {
if (!arr || arr.length === 0) {
return -1;
}
var min = arr[0];
var minIndex = 0;
for (var len = arr.length; len > 0; len--) {
if (arr[len] < min) {
min = arr[len];
minIndex = len;
}
}
return minIndex;
}
查看此fiddle