如何找到数组最小值的id?

时间:2013-09-05 20:44:47

标签: javascript arrays

我知道您可以通过键入

来获得数组的最小值
var min = Math.min.apply(null, array)

但这将返回数组的最小值,而不是此数组的id 例如,如果我有这些值:

array[1] = 24;
array[2] = 45;

我希望它返回1(持有最小值的ID)但是idk怎么做,有人可以帮我解决这个问题吗?

5 个答案:

答案 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