在javascript中查找数组中多个最小值的索引

时间:2015-09-18 16:41:48

标签: javascript arrays minimum

我想找到数组最小值的索引。

E.g。

var array = [1,2,3,4,1,7,8,9,1];

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

问题是Math.min.apply只返回第一个索引

min = 1且key = 0

我想做的是返回

min = 1 and key = [0,4,8];

是否可以使用Math.min.apply执行此操作?

3 个答案:

答案 0 :(得分:0)

var array = [1,2,3,4,1,7,8,9,1];

function findMinimumIndexes(array) {
    var min = Math.min.apply(Math, array);
    var indexes = [];

    array.forEach(function(item, idx, arr) {
        if (item === min) {
            indexes.push(idx);
        }
    });

    return indexes;
}

console.log(findMinimumIndexes(array));

该函数声明变量indexes并为其分配一个空数组,然后使用带有元素'的forEach调用填充该数组。值与min匹配的索引。

请注意,这仅适用于原始值,因为它使用===来检查等效性。 使其适用于非常平等的数组或对象。对于您正在寻找的那个,您需要更严格的实施。

答案 1 :(得分:0)

var array = [1,2,3,4,1,7,8,9,1];
var min = Math.min.apply( Math, array )

var arrayWithIndex = array.map(function(element, index) {
    return element + "-" + index;
});

var minValues = arrayWithIndex.filter(function(element) {
    return Number(element.split('-')[0]) === min;
});

var keys = minValues.map(function(element) {
    return Number(element.split('-')[1]);
});

我的算法是将原始数组映射到包含一个包含数字和索引的新数组。我然后过滤该数组的元素,其中数字等于min,然后再次映射以找到索引。

您也可以链接这些方法

return array.map(function(element, index) {
    return element + "-" + index;
})
.filter(function(element) {
    return Number(element.split('-')[0]) === min;
}).
.filter(function(element) {
    return Number(element.split('-')[1]);
});

答案 2 :(得分:0)

Array.prototype.reduce应该开展工作。

var array = [1, 2, 3, 4, 1, 7, 8, 9, 1];

function getMinKeys(array) {
    var min = Math.min.apply(Math, array);
    return array.reduce(function (r, a, i) {
        a === min && r.push(i);
        return r;
    }, []);
}

document.write('<pre>' + JSON.stringify(getMinKeys(array), 0, 4) + '</pre>');