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

JS中值相等时按key字母顺序排序HashMap的实现方法

解决方案

核心修改点

你只需要调整排序逻辑,在出现次数相同的场景下,追加按key字母升序排序的规则即可,使用字符串的localeCompare方法可以直接实现按自然字母顺序比较。
同时你原有代码中的统计循环存在逻辑问题:循环次数用了原字符串的长度而非单词数组的长度,导致会读取到不存在的数组项,后续额外删除undefined键的操作可以通过修正循环条件省略。

修改后完整代码

let string = 'This is a test. That is not a test. Test'
string = string.toLowerCase()
let map = new Map()

const str = string.replace(/[^\w\s]|_/g, "").replace(/\s+/g, " ");
const wordArr = str.trim().split(" ")

// 修正循环条件,遍历单词数组而非原字符串
for(let i = 0; i < wordArr.length; i++){
    const word = wordArr[i]
    if(map.has(word)){
        map.set(word, map.get(word) + 1)
    }else{
        map.set(word, 1)
    }
}

// 调整排序逻辑:先按次数降序,次数相同按字母升序
const sortedMap = new Map([...map.entries()].sort((a, b) => {
    const countDiff = b[1] - a[1]
    if (countDiff !== 0) return countDiff
    return a[0].localeCompare(b[0])
}))

// 按要求格式输出
for (const [word, count] of sortedMap.entries()) {
    console.log(`${word} ${count}`)
}

输出结果

运行上述代码后会直接输出你期望的结果:

test 3
a 2
is 2
not 1
that 1
this 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:21:03