如何对从 ngrx 实体检索的数据进行排序



我必须对从ngrx-entity-store获取的数据进行排序。我不打算在化简器内部执行此操作,因为我有三种排序方法要实现,并且我遵循了此堆栈溢出帖子上的公认答案以尝试完成它,但我有点撞墙了。使用以下代码段很好地获取未排序的数据:

sortPersnlByFunction(sortBy: string){
this.filterDefault = false;
this.filterByStatus = false;
this.filterByFunction = true;
this.zone.run(() => {
this.store
.pipe(select(selectAllPrsnls), map((prsnlList) => prsnlList))
.subscribe(value => {
this.Prsnl = Object.entries(value[1]).map((e) => ( e[1]  ));
console.log("The Prsnl", this.Prsnl)
});   
})}

控制台显示数据(未排序)已成功获取,然后我添加了此片段来执行排序:

this.sortedPrsnl = [...this.Prsnl].sort(
(a, b) => a[sortBy].localCompare(b[sortBy]));

现在整体代码是这样的:

sortPersnlByFunction(sortBy: string){
this.filterDefault = false;
this.filterStatus = false;
this.filterFunction = true;
this.zone.run(() => {
this.store
.pipe(select(selectAllPrsnls), map((prsnlList) => prsnlList))
.subscribe(value => {
this.Prsnl = Object.entries(value[1]).map((e) => ( e[1]  ));
this.sortedPrsnl = [...this.Prsnl].sort(
(a, b) => a[sortBy].localCompare(b[sortBy]));
console.log("The sorted", this.sortedPrsnl)
});

})}

但是添加排序片段也不起作用,控制台.log方法也不会触发。似乎最后一个片段无法执行,因此控制台.log甚至根本没有显示任何内容。

我只想提一下,sortBy是从前端发送的条件字符串,并且是应用排序的关键字。这是一个 Prsnl 数据属性。 我很感激任何帮助来完成这项工作,提前感谢。

由于最后一个控制台.log没有显示任何内容,您知道您的片段

this.sortedPrsnl = [...this.Prsnl].sort(
(a, b) => a[sortBy].localCompare(b[sortBy]));

不工作。一个可能的理由是因为没有使用sortby参数,也不能那样使用。因此,我将向您建议另一种避免混淆的方法。与其localeCompare不如继续使用JavaScript基本字符串比较运算符自己比较元素。然后,假设myField是您要排序的归档属性,您的片段将变为:

this.sortedPrsnl = [...this.Prsnl].sort(
(a, b) => (a.myField.toLowerCase() > b.myField.toLowerCase())? 1 : -1;

使用这种方法,您可以对此进行排序。按字段myField的字母顺序排列的 Prsnl,它应该是this.Prsnl的字段属性。

最新更新