如果名称以数字结尾,则Angular 4 OrderBy管道不排序

如果名称以数字结尾,则Angular 4 OrderBy管道不排序,angular,typescript,sorting,angular-pipe,Angular,Typescript,Sorting,Angular Pipe,我想使用管道对以数字结尾的名称进行排序。 我使用了自定义管道,并获得了预期的结果 $Apple水果-符号 1苹果水果-数量 苹果水果-按字母顺序排列 但如果名称以数字结尾,则不是排序 现在的结果: 苹果果3 苹果果01 苹果果5 苹果果02 JSON [ {"name": "Apple fruit3"}, {"name": "$Apple fruit"}, {"name": "Apple fruit"}, {"name": "Apple fruit01"}, {"name": "Appl

我想使用管道对以数字结尾的名称进行排序。

我使用了自定义管道,并获得了预期的结果

  • $Apple水果-符号
  • 1苹果水果-数量
  • 苹果水果-按字母顺序排列
但如果名称以数字结尾,则不是排序

现在的结果:

  • 苹果果3
  • 苹果果01
  • 苹果果5
  • 苹果果02
JSON

[
{"name": "Apple fruit3"},
{"name": "$Apple fruit"},
{"name": "Apple fruit"},
{"name": "Apple fruit01"},
{"name": "Apple fruit5"},
{"name": "Apple fruit02"},
]
HTML

<div *ngFor='let list of names | appOrderBy : "name" '>
<div>{{list.name}}</div>
</div>

{{list.name}
OrderBy自定义管道

import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
     name: 'appOrderBy'
})
export class OrderBy implements PipeTransform {
transform(array: Array<string>, args: string): Array<string>{
array.sort((a: any, b: any) => {
  if (a[args] < b[args]) {
    return -1;
  } else if (a[args] > b[args]) {
    return 1;
  } else {
    return 0;
  }
});
return array;
}
}
从'@angular/core'导入{Pipe,PipeTransform};
@烟斗({
姓名:“appOrderBy”
})
导出类OrderBy实现了PipeTransform{
转换(数组:数组,参数:字符串):数组{
array.sort((a:any,b:any)=>{
if(a[args]b[args]){
返回1;
}否则{
返回0;
}
});
返回数组;
}
}

使用一个Intl.Collator作为自然数排序的比较函数

const数组=[
{名称:“苹果果3”},
{名称:“$苹果果”},
{名称:“苹果果”},
{名称:“苹果果01”},
{名称:“苹果果5”},
{名称:“苹果果02”},
];
args='name';
var collator=new Intl.collator(未定义,{numeric:true,敏感度:'base'});
sort((a,b)=>collator.compare(a[args],b[args]);

console.log(数组)不工作??谢谢@AshishRanjan。这个方法也很有效,但我现在会保留Adrain品牌变更,这对meI来说更简单、更有意义,这意味着你的代码已经在为我工作了。。。删除<代码>其他<代码>部分不会引起任何可见的更改,即使您将添加其他内容,它仍然是相同的。考虑避免使用管道排序,而只在需要时对组件进行过滤。