按照对象值将JavaScript对象键排序为数组

3
假设我有一个对象,其键为数字,值为字符串。
var obj = {
    '24': 'Sean',
    '17': 'Mary',
    '88': 'Andrew',
    '46': 'Kelvin'
}

有没有一种简单的方法,可以根据键的值将它们排序到一个数组中,使结果看起来像这样:
[88,46,17,24]
1个回答

5
这是一种实现方法:

var obj = {
    '24': 'Sean',
    '17': 'Mary',
    '88': 'Andrew',
    '46': 'Kelvin'
}

var sortedKeys = Object.keys(obj).sort(function(a, b) {
  return obj[a].localeCompare(obj[b]);
}).map(Number)

console.log(sortedKeys)

如果你希望结果是字符串数组而不是数字,请省略.map()部分。
进一步阅读: 或者使用ES6箭头函数实现相同的功能:
const sortedKeys = Object.keys(obj)
                     .sort((a, b) => obj[a].localeCompare(obj[b]))
                     .map(Number)

字符串值处理得很好! - Phil
做得真快,而且做得很好。刚学习了一下.localeCompare()。感谢你的回答。 - Clueless_Coder
@Phil - 谢谢!我承认一开始没有想到这个,但是当我在没有使用.map()的情况下运行我的代码时,我注意到输出中的字符串。我注意到除此之外,您独立想出了完全相同的东西,只不过使用了箭头函数,假设OP接受它们,那肯定更整洁。考虑到您删除了那个答案,我可能会将箭头函数添加到我的答案中。 - nnnnnn
@nnnnnn 没有必要有两个相同的答案,而且你的回答是第一个 :). 顺便说一下,你也可以通过 .map(Number) 将数组转换为数字。 - Phil
@Phil - 哎呀!我知道那个,实际上RobG刚在一条(现已删除的)评论中提到过,所以我应该记得的。我会编辑进去的。 - nnnnnn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接