如果我有这样的JavaScript对象:
list = {
John: {
DOB: '2017-02-01'
},
Rob: {
DOB: '2016-07-09'
},
}
如何将此对象排序为按DOB排序的对象列表。我安装了lodash,因此使用它是一种选择。
我希望结果是可映射的,即一个数组,如:
sorted_keys = ['Rob','John']
或
sorted_array = [
{
Rob: {
DOB: '2016-07-09'
}
},
{
John: {
DOB: '2017-02-01'
}
},
]
答案 0 :(得分:3)
var list = {
John: {
DOB: '2017-02-01'
},
Rob: {
DOB: '2016-07-09'
}
}
var sortedKeys = Object.keys(list).sort(function(a, b) {
return new Date(list[a].DOB) - new Date(list[b].DOB)
})
console.log(sortedKeys)
或使用箭头功能:
let list = {
John: {
DOB: '2017-02-01'
},
Rob: {
DOB: '2016-07-09'
}
}
let sortedKeys = Object.keys(list).sort((a, b) => new Date(list[a].DOB) - new Date(list[b].DOB))
console.log(sortedKeys)
如果有字符串,请回答您的评论:
let list = {
John: {
DOB: 'bbb'
},
Rob: {
DOB: 'aaa'
}
}
let sortedKeys = Object.keys(list).sort((a, b) => {
if(list[a].DOB < list[b].DOB) return -1;
if(list[a].DOB > list[b].DOB) return 1;
return 0;
})
console.log(sortedKeys)
答案 1 :(得分:1)
首先,请注意,有一个名为list
的对象不是列表而是对象,这有点奇怪。
可以按照以下步骤对此对象中的键值对进行排序:
Object.keys
list[key].DOB
值的字母顺序对键进行排序。幸运的是,您可以使用localeCompare
来比较YYYY-MM-DD格式的日期。像这样:
let sorted = Object.keys(list)
.sort((a, b) => list[a].DOB.localeCompare(list[b].DOB))
.map(k => { return { [k]: list[k] } }));
结果:
[
{
"Rob": {
"DOB": "2016-07-09"
}
},
{
"John": {
"DOB": "2017-02-01"
}
}
]