You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript Map操作:排序键值与获取值最大且字典序最大的键

问题解答

1. 如何在JavaScript的Map中对键和值进行排序?

Map本身会保留键的插入顺序,但如果需要按键或值自定义排序,需要先将Map转换为数组,排序后再重新构建Map:

按键排序

// 按字符串键的字典序升序排序
const sortedByKeyAsc = new Map(
  Array.from(originalMap.entries()).sort(([keyA], [keyB]) => {
    if (keyA < keyB) return -1;
    if (keyA > keyB) return 1;
    return 0;
  })
);

// 按数字键升序排序
const sortedByNumKeyAsc = new Map(
  Array.from(originalMap.entries()).sort(([keyA], [keyB]) => keyA - keyB)
);

按值排序

// 按值升序排序
const sortedByValueAsc = new Map(
  Array.from(originalMap.entries()).sort(([, valA], [, valB]) => valA - valB)
);

// 按值降序排序,值相同时按键的字典序降序排序
const sortedByValueDescThenKeyDesc = new Map(
  Array.from(originalMap.entries()).sort(([keyA, valA], [keyB, valB]) => {
    if (valB !== valA) {
      return valB - valA; // 值降序
    }
    // 值相同时,键字典序降序
    return keyB > keyA ? 1 : -1;
  })
);

2. 获取值最大且字典序最大的键

针对你的需求,在现有代码基础上,只需在计算出最大值max后,筛选出所有值等于max的键,再从中选出字典序最大的即可。修改后的完整代码如下:

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());
    
    // 筛选出所有值等于max的键值对,再选出字典序最大的键
    let result = '';
    for (const [key, val] of map.entries()) {
        if (val === max) {
            if (key > result) {
                result = key;
            }
        }
    }
    return result;
};

代码说明:

  1. 遍历Map的所有键值对,筛选出值等于max的键;
  2. 逐个比较这些键的字典序,保留最大的那个(JavaScript中字符串比较遵循Unicode编码顺序,字母的字典序与Unicode顺序一致)。

针对输入示例releaseTimes = [9,29,49,50], keysPressed = "cbcd",代码会筛选出'c'和'b'两个候选键,最终返回字典序更大的'c',符合期望输出。

内容的提问来源于stack exchange,提问作者Harsh Mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:54:19