按键按字母顺序对Object.entries进行排序

时间:2019-04-11 04:37:06

标签: javascript node.js

说我有这个:

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]

为什么我不能按字母顺序对键进行排序?

3 个答案:

答案 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});
}