我在表格上使用了列排序。它在名字和姓氏列上工作正常,但在 dl 和 dl 分数上它不起作用。你能调查一下并帮我解决吗。
您可以在这里查看:https://stackblitz.com/edit/angular-ivy-87hi8i?file=src%2Fapp%2Fapp.component.html
sort(property: any) {
this.isDesc = !this.isDesc;
this.column = property;
let direction = this.isDesc ? 1 : -1;
this.allUser.sort(function(
a: { [x: string]: number },
b: { [x: string]: number }
) {
if (a[property] < b[property]) {
return -1 * direction;
} else if (a[property] > b[property]) {
return 1 * direction;
} else {
return 0;
}
});
}
标记
<tr>
<th *ngIf="!isEdit">Edit</th>
<th [ngClass]="{pointer: true, active:column=='first_name',desc:isDesc, asc:!isDesc}"
(click)="sort('first_name')">First Name</th>
<th [ngClass]="{pointer: true, active:column=='last_name',desc:isDesc, asc:!isDesc}"
(click)="sort('last_name')">Last Name</th>
<th>Email</th>
<th>Gender</th>
<th>DOB</th>
<th>Impact</th>
<th>Score</th>
<th [ngClass]="{pointer: true, active:column=='dl',desc:isDesc, asc:!isDesc}" (click)="sort('dl')">
DL</th>
<th [ngClass]="{pointer: true, active:column=='co_score',desc:isDesc, asc:!isDesc}"
(click)="sort('co_score')">DL Score</th>
<th></th>
</tr>
答案 0 :(得分:0)
你像这样声明你的排序方法:
this.allUser.sort(function(
a: { [x: string]: number },
b: { [x: string]: number }
)
您是说数组中的所有对象都有返回数字的键。
因此,当您对 first_name
属性进行排序时,它会在执行 A Male
时找到类似 a['first_name']
的值,这根本不是数字,因此很明显这是一个逻辑问题。无论如何,排序在运行时都适用,因为 javascript 可以像这样对字符串进行排序。
但是当您对 dl
进行排序时,该属性甚至不存在于您的对象中,因此它会将 undefined
与 undefined
(a['dl']
) 进行比较,它们是相等的不会发生排序。
因此,如果您想对其进行排序,请确保使用属性 dl
的值填充您的对象。