有没有一种方法可以根据嵌套对象的参数之一对其进行排序?
例如,如果我有这样的数据结构:
var someObject = {
'part1328': {
'time': 1543203609575,
},
'part38321': {
'time': 1543203738716,
},
'part1328': {
'time': 1543203746046,
},
'part38338': {
'time': 1543203752264,
}
};
,我不知道我要预先准备多少部分,或者它们的名称是什么。有什么方法可以按零件的时间对其进行排序,并获取最新的和最旧的零件?
答案 0 :(得分:3)
您可以使用Object.entries
来获取一组键/值对作为列表。然后,您可以对列表进行排序并按自己的意愿排列数据:
var someObject = {
'part1328': {
'time': 1543203609575,
},
'part38321': {
'time': 1543203738716,
},
'part1328': {
'time': 1543203746046,
},
'part38338': {
'time': 1543203752264,
}
};
let arr = Object.entries(someObject).sort((a, b) => a.time - b.time)
console.log(arr)
// from here you can manage the data any way you want.
// for example, an array of simple objects:
let merged = arr.map(([key, value]) => ({id: key, ...value}) )
console.log(merged)
答案 1 :(得分:1)
您无法对对象进行排序。您可以对对象的键列表进行排序,可以对对象的值进行排序,也可以对键和相应值的对列表(“条目”)进行排序。这是第一种方法:
Object.keys(someObject).sort((a, b) => a.time - b.time)
// => ["part1328", "part38321", "part38338"]
然后您可以使用这些排序的键以所需顺序访问原始对象中的值。
还请注意,对象不能具有重复键。他们只是互相覆盖。因此,第四个值甚至在您将其分配给someObject
之前就消失了。
答案 2 :(得分:0)
您可以通过创建按array
排序的time
来维护排序列表
代码:
const someObject = {
'part1328': {
'time': 1543203609575,
},
'part38321': {
'time': 1543203738716,
},
'part1328': {
'time': 1543203746046,
},
'part38338': {
'time': 1543203752264,
}
};
const result = Object.keys(someObject)
.sort((a, b) => someObject[a].time - someObject[b].time)
.map(k => ({ [k]: someObject[k] }));
console.log(result);