说我有这个:
for(let [k,v] of Object.entries({a:1,b:2}).sort((a,b) => b[0] - a[0])){
console.log({k,v});
}
我总是得到以下输出:
{ k: 'a', v: 1 }
{ k: 'b', v: 2 }
即使我将其切换为:
a[0] - b[0]
为什么我不能按字母顺序对键进行排序?
答案 0 :(得分:2)
比较字符串时,使用localeCompare()几乎总是更好。它为您提供了更大的灵活性和更多选择来处理大小写,国际字符和数字。它确切地返回sort()
想要的内容:
let arr = Object.entries({a:1,b:2})
arr.sort((a,b) => b[0].localeCompare(a[0]))
console.log(arr)
arr.sort((a,b) => a[0].localeCompare(b[0]))
console.log(arr)
答案 1 :(得分:1)
如果要按字母顺序排序,建议使用String.localeCompare()。
let sortAsc = Object.entries({a:1, b:2}).sort((a, b) => a[0].localeCompare(b[0]));
let sortDesc = Object.entries({a:1, b:2}).sort((a,b) => b[0].localeCompare(a[0]));
console.log("Ascending:");
for(let [key, val] of sortAsc)
{
console.log(key, val);
}
console.log("Descending:");
for(let [key, val] of sortDesc)
{
console.log(key, val);
}
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
答案 2 :(得分:0)
nvm,我的问题没有道理,对于字符串减法没有明显的定义。虽然可以。
const sorter = (a,b) => b[0] > a[0] ? 1 : (b[0] < a[0] ? -1 : 0);
const sorted = Object.entries({a:1,b:2}).sort(sorter);
for(let [k,v] of sorted){
console.log({k,v});
}