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
相关产品推荐
相关产品推荐

