我一直在使用对象作为哈希表,并通过Objects.keys(foo).reduce((a,b) => foo[a] > foo[b] ? a : b)
从中获得最高值。然而,我已经改用Maps((。迭代Map对象以获得最高值的理想方法是什么?
您可以将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))
我不知道map比以前的方法改进了多少,但这里是遍历map对象的方法。
// 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