如何在Javascript中对Map中的键和值进行排序



我正在尝试获取map中具有最大值的密钥,我通过new Map()创建了该密钥,并添加了密钥&

现在,我想得到值最大的键,如果两个键的值相同,那么我想返回字典中最大的键。

例如:{'a': 20, 'b':20},那么我希望返回b

我的代码:

var slowestKey = function(releaseTimes, keysPressed) {
let map=new Map();
map.set(keysPressed[0],releaseTimes[0]);  
for(let i=0; i<releaseTimes.length-1; i++){
let time=releaseTimes[i+1]-releaseTimes[i];
map.set(keysPressed[i+1],time);
}
let max= Math.max(...map.values());
console.log(map)
console.log(Math.max(...map.values()));

};

输入:

Input: releaseTimes = [9,29,49,50], keysPressed = "cbcd"

Expected Output: "c"

console.log:

Map(3) { 'c' => 20, 'b' => 20, 'd' => 1 }
20

如何获取值最大且按字典顺序更大的密钥?

通过拥有一个键/值对数组,您可以按进行排序

  • 值递减
  • 按键下降

并取第一对(索引0)。

const
pairs = [['c', 9], ['b', 29], ['c', 49], ['d', 50], ['a', 50]];
pairs.sort((a, b) => b[1] - a[1] || b[0].localeCompare(a[0]));
console.log(pairs[0]);

使用filter可以过滤值=maxkeys,然后可以过滤sort,并获得第一项。

所以,额外的代码将是

const [key] = [...map.keys()].filter(key => {
return map.get(key) === max
}).sort((a, b) => a - b)

var slowestKey = function(releaseTimes, keysPressed) {
let map=new Map();
map.set(keysPressed[0],releaseTimes[0]);  
for(let i=0; i<releaseTimes.length-1; i++){
let time=releaseTimes[i+1]-releaseTimes[i];
map.set(keysPressed[i+1],time);
}
let max= Math.max(...map.values());
const [key] = [...map.keys()].filter(key => {
return map.get(key) === max
}).sort((a, b) => a - b)
console.log(key)
};

slowestKey([9,29,49,50], "cbcd")

相关内容

  • 没有找到相关文章

最新更新