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