我必须对从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
的字段属性。