Javascript:在Map()与Object中寻找最高价值

时间:2018-08-04 22:57:44

标签: javascript maps

我一直在使用对象作为哈希表,并且通过Objects.keys(foo).reduce((a,b) => foo[a] > foo[b] ? a : b)从对象中获得了最高的价值。但是,我已切换为使用Maps()。遍历Map对象以获得最高值的理想方法是什么?

2 个答案:

答案 0 :(得分:4)

您可以将values()传播到Math.max中:

let m = new Map([['a', 2], ['b',4], ['c',6]])

console.log("Max:", Math.max(...m.values()))

如果您既需要键也需要值,那么我认为您将使用reduce()返回到地图的entries()

let m = new Map([['a', 2], ['b',4], ['c',6]])

console.log([...m.entries()].reduce((a, e ) => e[1] > a[1] ? e : a))

答案 1 :(得分:0)

好吧,我不知道地图比以前的方法有多少改进,但这是循环遍历地图对象的方法。

    // create map
    var myMap = new Map();
    // add key value pairs
    myMap.set('twelve', 12);
    myMap.set('two', 2);
    myMap.set('eleven', 11 );
    myMap.set('three', 3);

    var getMax1 = function (someMap) {
      var maxValue;
      for (var [key, value] of someMap) {
         maxValue = (!maxValue || maxValue < value) ? value : maxValue;
      }
      return maxValue;
    }

    var getMax2 = function (someMap) {
      var maxValue;
      for (var key of someMap.keys()) {
        var value = someMap.get(key);
        maxValue = (!maxValue || maxValue < value) ? value : maxValue;
      }
      return maxValue;
    }

    console.log(getMax1(myMap)); // 12
    console.log(getMax2(myMap)); // 12