Mat排序数字和文本列的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mat排序数字和文本列的问题相关的知识,希望对你有一定的参考价值。

我有角度材料数据源。角材料版本是^ 5.0.3排序正在工作。但是对于某些列,它排序不正确。那里有数字和文字。例如,排序结果如“XXX”,“1”,“1tesxt”,“1”,“OPD”,“OXD”,“12”。

<mat-table #table [dataSource]="dataSource" matSort > 
  <ng-container matColumnDef="model">
    <mat-header-cell *matHeaderCellDef mat-sort-header> Model </mat-header-cell>
    <mat-cell *matCellDef="let element"> {{element.model}} </mat-cell>
  </ng-container>

感谢您的帮助。

答案

这是因为标准的sortingDataAccessor将数字字符串转换为数字,而在javascript 1 > 'one' and 1 < 'one'中,它们都评估为false

作为一种解决方法,您可以在没有强制转换的情况下定义自己的sortingDataAccessor

ngAfterViewInit() {    
  this.dataSource.sort = this.sort;
  this.dataSource.sortingDataAccessor = (data, attribute) => data[attribute];
}

解决方法是从这个Github issue复制的。

另一答案

您需要取出那些不是数字的字符,并将包含数字字符的字符串转换为数字类型值。

您的初始列值:'ID0239'。取出角色后:'0239'。将字符串转换为数字:0239。

0239是您需要在sortingDataAccessor函数内返回的值。

以上是关于Mat排序数字和文本列的问题的主要内容,如果未能解决你的问题,请参考以下文章

mat-table重置mat-sort到初始状态

Excel怎么把排序依据设置为数值?

LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段

Excel UDF - 对单元格内用逗号分隔的数字和文本进行排序

ExtJS GridPanel numberColumn - 排序问题

根据包含数字和不包含数字的行对 CSV 中的行进行排序