【发布时间】:2021-10-26 21:12:45
【问题描述】:
我有一个类似的对象:
{
'2021': {
'08': {
'26': [{'name': 'Bob', age: 34}, {'name': 'Alice', age: 33}],
'27': [{'name': 'Jane', age: 21}]
},
'09': {
'03': [{'name': 'John', age: 47}, {'name': 'Sue', age: 36}]
}
},
'2022': {
'04': {
'05': [{'name': 'David', age: 26}]
}
}
}
我想将此对象展平为按日期降序排列的<year, month, day, name, age> 对象数组,因此所需的输出为:
[
{'year': '2022', 'month': '04', 'day': '05', 'name': 'David', age: 26},
{'year': '2021', 'month': '09', 'day': '03', 'name': 'John', age: 47},
{'year': '2021', 'month': '09', 'day': '03', 'name': 'Sue', age: 36},
{'year': '2021', 'month': '08', 'day': '27', 'name': 'Jane', age: 21},
{'year': '2021', 'month': '08', 'day': '26', 'name': 'Bob', age: 34},
{'year': '2021', 'month': '08', 'day': '26', 'name': 'Alice', age: 33},
]
更新:
我按照Nina的逻辑,也拆分成2个部分,先扁平化成单深度数组,然后排序。扁平化部分我有一个“丑陋”的嵌套 for 循环,它也可以工作并使用完全相同的排序代码:
let output = []
for (const year in data) {
for (const month in data[year]) {
for (const day in data[year][month]) {
for (const person of data[year][month][day]) {
const merged = Object.assign({
'year': year,
'month': month,
'day': day,
}, person)
output.push(merged)
}
}
}
}
这不太灵活,我不确定如何判断性能差异,但我会接受 Nina 的有效答案。
【问题讨论】:
-
到目前为止你的想法是什么?
-
这看起来并不难。你有什么问题?
标签: javascript sorting nested flatten