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

Posted

技术标签:

【中文标题】在javascript中的数组中查找多个最小值的索引【英文标题】:Find indexes of multiple minimum in an array in javascript 【发布时间】:2015-12-15 21:39:01 【问题描述】:

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

例如

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 做到吗?

【问题讨论】:

【参考方案1】:
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】:

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>');

【讨论】:

为什么是a === min &amp;&amp; r.push(i);?它甚至会带来性能提升吗? 与什么比较?写a === min &amp;&amp; r.push(i); 比写if (a === min) r.push(i); 短。【参考方案3】:
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 匹配。

请注意,这仅适用于原始值,因为它使用=== 来检查等价性。 要使其在与您正在寻找的“深度相等”的数组或对象上工作,您需要更严格的实现。

【讨论】:

以上是关于在javascript中的数组中查找多个最小值的索引的主要内容,如果未能解决你的问题,请参考以下文章

如何从Javascript中的数组中获取最小的差异值

在列中查找最小值

falcor:使用路径中的索引来设置项目值

我是不是在查找数组中最小值的索引时引用或实例错误?

整理:Javascript获取数组中的最大值和最小值的方法汇总

C语言丨如何查找数组(序列)中的最大值或者最小值?