【问题标题】:Find indexes of multiple minimum in an array in javascript在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 做到吗?

【问题讨论】:

    标签: javascript arrays minimum


    【解决方案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 匹配。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-05
        • 1970-01-01
        • 2017-08-13
        • 1970-01-01
        • 2016-03-17
        • 2021-08-26
        • 2013-11-02
        • 2016-08-25
        相关资源
        最近更新 更多