【发布时间】:2021-09-12 17:52:13
【问题描述】:
我有一组未排序的“版本”对象。
export interface Edition {
name: string;
edition_code: string;
parent_code: string;
released_at: number;
}
每个对象都设置了name、edition_code 和released_at 属性。 parent_code 属性可以为空。
没有parent_code 的版本对象是父版本。 parent_code 等于父版本的edition_code 的所有版本对象都是此父版本的子版本。
我尝试按以下条件对数组进行排序:
-
所有父版本必须按
released_at(最新优先)排序- 父版本可以有零个或多个子版本
-
每个子版本都必须在匹配的父版本对象之后直接排序。 (忽略
released_at属性)- 子版本必须按名称的字母顺序排序。
我正在尝试使用sort() 方法对数组进行排序。 allEditions()-方法返回一个Observable<Array<Edition>>
this.dataSource = this.editionService.allEditions().pipe(
map((editions) =>
editions
.sort((a, b) => {
// this is the point where i struggle to create the correct sorting function
})
)
);
示例:
这是一个未排序数组的示例:
[
{
"name": "Stomper";
"edition_code": "sto";
"parent_code": null;
"released_at": "1587679200000";
},
{
"name": "Flyer";
"edition_code": "fly";
"parent_code": null;
"released_at": "1619128800000";
},
{
"name": "Stomper Promos";
"edition_code": "psto";
"parent_code": "sto";
"released_at": "1587679200000";
},
{
"name": "Stomper Ultra";
"edition_code": "usto";
"parent_code": "sto";
"released_at": "1587679200000";
},
{
"name": "Flyer Special";
"edition_code": "sfly";
"parent_code": "fly";
"released_at": "1619128800000";
},
{
"name": "Stomper Extras";
"edition_code": "esto";
"parent_code": "sto";
"released_at": "1587679200000";
},
{
"name": "Roller";
"edition_code": "rol";
"parent_code": null;
"released_at": "1374184800000";
},
{
"name": "Flyer Reloaded";
"edition_code": "rfly";
"parent_code": "fly";
"released_at": "1493330400000";
}
]
这是完全相同的数组,但已排序:
[
{
"name": "Flyer";
"edition_code": "fly";
"parent_code": null;
"released_at": "1619128800000";
},
{
"name": "Flyer Reloaded";
"edition_code": "rfly";
"parent_code": "fly";
"released_at": "1493330400000";
},
{
"name": "Flyer Special";
"edition_code": "sfly";
"parent_code": "fly";
"released_at": "1619128800000";
},
{
"name": "Stomper";
"edition_code": "sto";
"parent_code": null;
"released_at": "1587679200000";
},
{
"name": "Stomper Extras";
"edition_code": "esto";
"parent_code": "sto";
"released_at": "1587679200000";
},
{
"name": "Stomper Promos";
"edition_code": "psto";
"parent_code": "sto";
"released_at": "1587679200000";
},
{
"name": "Stomper Ultra";
"edition_code": "usto";
"parent_code": "sto";
"released_at": "1587679200000";
},
{
"name": "Roller";
"edition_code": "rol";
"parent_code": null;
"released_at": "1374184800000";
}
]
【问题讨论】:
标签: javascript arrays typescript sorting