角管排序(Angular pipe sorting)

2019-10-29 07:56发布

根据这个问题- > 升序和降序排序在4角

我做了相同的管道,但它不能数字自然排序。 我的意思是2是>然后11。

这怎么能管进行修改,以字符串和数字排序?

@Pipe({
    name: 'orderBy'
})

export class OrderByPipe implements PipeTransform {

    transform(records: Array<any>, args?: any): any {
        if (records && records.length > 0) {
            return records.sort(function (a, b) {                 
                if (a[args.property] < b[args.property]) {
                    return -1 * args.direction;
                } else if (a[args.property] > b[args.property]) {
                    return 1 * args.direction;
                } else {
                    return 0;
                }
            });

        }
    }
}

Answer 1:

那是因为你的排序值作为字符串 - 字典序。 为你的管输入似乎是类型的Array<{ [propertyName: string]: [value: string] }>

要么请确保输入的属性值是数字或值转换为number比较之前。

如果你需要基于这样来到你管的数据类型进行排序,你可以使用这样的事情:

@Pipe({
  name: 'orderBy'
})
export class OrderByPipe implements PipeTransform {

  transform(records: Array<any>, args?: any): any {
    if (records && records.length > 0) {
      return records.sort(
        (a, b) => args.direction * (
          typeof a[args.property] === 'number'
            ? (a[args.property] - b[args.property])
            : a[args.property] > b[args.property] ? 1 : -1)
      );
    }
  }
}

希望这有所帮助 :-)



文章来源: Angular pipe sorting