在Javascript中,当值相同时按值排序,但按字母顺序排序



如果我有对象,

const obj = { Peter: 3, Jeremy: 2, Chris: 1, Adam: 2 };

我想比较对象的值,并按数字顺序对它们进行排序。

因此,我尝试了

let answer = Object.keys(obj);
answer.sort((a,b) => {
return obj[b] - obj[a];
})

输出为['Peter', 'Jeremy', 'Adam', 'Chris']

我想按字母顺序对JeremyAdam进行排序,因为它们具有相同的值。

我想要的输出是['Peter', 'Adam', 'Jeremy', 'Chris']

我如何接近这个答案?

对于相同的值,您可以使用一个条件来根据键的字母顺序进行排序

const obj = { Peter: 3, Jeremy: 2, Chris: 1, Adam: 2 };
let answer = Object.keys(obj);
answer.sort((a,b) => {
if (obj[b] == obj[a]) return a.localeCompare(b)
return obj[b] - obj[a];
})
console.log(answer)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare

const obj = { Peter: 3, Jeremy: 2, Chris: 1, Adam: 2 };
const result = Object.entries(obj) // get array of [key, value]
// sort by value descending, then alphabetically by key
.sort(([a,b],[c,d])=>d-b || a.localeCompare(c)) 
.map(([i])=>i) // extract just the key
console.log(result)

最新更新