0

Angular 4 - 如何使用自定义管道对数组中的版本号字符串进行排序?

我有一个版本号如 v.9.1、v.9.2、v10.0 的 json 文件。我尝试使用自定义管道进行排序,但排序为 v.9.2、v.9.1、v.10.0 而不是 v.10.0、v.9.2、v.9.1。所以看起来它被视为字符串。

这是我在管道中尝试过的:

import {Injectable, PipeTransform, Pipe} from '@angular/core';
import { P11dComponent } from './p11d.component';

@Pipe({
    name: 'sortByVersion'
})

@Injectable()
export class SortVersionPipe implements PipeTransform{

transform(array: Array<any>, args: string): Array<any> {
        if (array !== undefined) {

            array.sort((a: any, b: any) => {
                if ( parseFloat(a[args.slice(3,4)]) < parseFloat(b[args.slice(3.4)]) ){
                    return 1;
                } else if ( parseFloat(a[args.slice(3,4)]) < parseFloat(b[args.slice(3.4)]) ) {
                    return -1;
                } else {
                    return 0;   
                }
            });
        }
        return array;
}
}
4

1 回答 1

1

如果我们有这样的数组:

arr = ['v.9.1', 'v.9.2', 'v.10.0']

那么transform方法可能如下所示:

transform(array: Array<any>): Array<any> {
    if(!array) {
      return null;
    }
    return array.sort((a, b) => b.slice(2) - a.slice(2));
}

Plunker 示例

请注意:您不需要使用@Injectable已经装饰@Component,@NgModule或装饰@Directive器的类@Pipe

于 2017-08-19T18:22:14.927 回答