0

我知道您可以通过键入来获得数组的最小值

var min = Math.min.apply(null, array)

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

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

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

4

5 回答 5

4
var index = array.indexOf(Math.min.apply(null, array));
于 2013-09-05T20:46:56.220 回答
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;
    }
}
于 2013-09-05T20:54:03.657 回答
2

你可以这样做:

var id = array.indexOf(Math.min.apply(null, array));
于 2013-09-05T20:47:32.080 回答
0

获得值后,您可以使用它indexOf来获取索引,如下所示:

var index = array.indexOf(Math.min.apply(null, array));

您应该知道,indexOf它最近才包含在 JavaScript(准确地说是 ES5/JS 1.6)中,因此如果该函数不存在,您可能需要为其找到一些包装器。

有关更多信息,请参阅MDN(其中包含向后兼容函数的示例实现)。

于 2013-09-05T20:48:17.443 回答
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;
}

看看这个小提琴

于 2013-09-05T21:00:46.233 回答