地图
{
'i' => 2,
'love' => 2,
'leetcode' => 1,
'coding' => 1
}
我想
Map
进行排序预期
{
"i" => 2,
"love" => 2,
"coding" => 1,
'leetcode' => 1,
}
我尝试过的解决方案
let map = new Map();
map.set("i", 2);
map.set("love", 2);
map.set("coding", 1);
map.set("live", 1);
let output = new Map([...map.entries()].sort((a, b) => {
//if b[0] and a[0] matches sort by key stuck here
return b[0] - a[0];
}));
console.log(output);
答案 0 :(得分:4)
您需要对计数进行降序排序,并以String#localeCompare
升序对字符串进行排序。
第一部分采用两个值的差值,而Array#sort
期望值
小于a
的零小于b
,这意味着两者具有正确的顺序,例如1 - 2
,得到-1
,
等于零,表示bot元素具有相同的值,例如7 - 7
或
大于零,这意味着两个元素都必须交换,例如5 - 3
。
相同的结果返回带有字符串的localeCompare
。
let map = new Map();
map.set("coding", 1);
map.set("love", 2);
map.set("live", 1);
map.set("i", 2);
let output = new Map([...map].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])));
console.log([...output]);
答案 1 :(得分:4)
值出现在索引// Crashing:
implementation "androidx.appcompat:appcompat:1.1.0-alpha01"
// Working:
implementation "androidx.appcompat:appcompat:1.1.0-alpha03"
上,因此将索引更新为1
以基于值进行排序,并使用String#localeCompare
进行字符串比较。
1
或使用ES6 Destructuring assignment。
let map = new Map();
map.set("i", 2);
map.set("love", 2);
map.set("coding", 1);
map.set("live", 1);
// for sorting based on number we need to return the difference
// in case those are equals difference would be 0(falsy value)
// and the or part will be executed and returns(string comaprison)
let output = new Map([...map].sort((a,b) => b[1] - a[1] || a[0].localeCompare(b[0]) ));
console.log(...output);
仅供参考: :了解Logical operators refer to MDN docs的基本概念。