对于角度4中大于10的值,筛选器orderby未按预期工作 从'angular2/core'导入{Pipe,PipeTransform}; @管道({name:'orderBy'}) 导出类OrderByPE实现PipeTransform{ 转换(记录:数组,参数?:any):any{ 返回记录。排序(函数(a,b){ if(a[args.property]b[args.property]){ 返回1*args.direction; } 否则{ 返回0; } }); }; }

对于角度4中大于10的值,筛选器orderby未按预期工作 从'angular2/core'导入{Pipe,PipeTransform}; @管道({name:'orderBy'}) 导出类OrderByPE实现PipeTransform{ 转换(记录:数组,参数?:any):any{ 返回记录。排序(函数(a,b){ if(a[args.property]b[args.property]){ 返回1*args.direction; } 否则{ 返回0; } }); }; },angular,Angular,请检查这个,它对我有效,但我看到一件事,整数排序假设我们取1,2,3,4,5,6,7,8,9,10,11,12,13。它的行为异常排序数组时面临的一般问题是因为数组中使用的数据类型 例如- import {Pipe, PipeTransform} from 'angular2/core'; @Pipe({ name: 'orderBy' }) export class OrderrByPipe implements PipeTransform { transform(records:

请检查这个,它对我有效,但我看到一件事,整数排序假设我们取1,2,3,4,5,6,7,8,9,10,11,12,13。它的行为异常

排序数组时面临的一般问题是因为数组中使用的数据类型

例如-

import {Pipe, PipeTransform} from 'angular2/core';

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

  transform(records: Array<any>, args?: any): any {

    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;
          }
        });
    };
}
这就是为什么您的管道在1到9的数字范围内工作正常,而在9之后出现故障的原因

因此,处理数组元素的比较时应考虑所比较项的数据类型

编辑排序

考虑下面的示例,其中字符串和数字类型的比较是分开处理的

函数orderByComparator(a,b){
如果((isNaN(parseFloat(a))| |!isFinite(a))| |(isNaN(parseFloat(b))| |!isFinite(b))){
//一个数字的大小写不是很适合比较吗
if(a.toLowerCase()b.toLowerCase())
返回1;
}
否则{
//将字符串解析为数字以进行正确比较
if(parseFloat(a)parseFloat(b))
返回1;
}
返回0;//彼此相等
}
log(“数字比较-”,orderByComparator(2,11));

log(“字符串比较-”,orderByComparator(“2”,“11”)您好,它的工作很好的数字,但它给我一个错误小写未定义。。。下面是代码返回c.sort(函数(a,b){if((isNaN(parseFloat(a[args.property]))| |!isFinite(a[args.property]))| |(isNaN(parseFloat(b[args.property])){//不是一个小写的数字,因此无法正确比较if(a[args.property].toLowerCase()new Date(a.JsonDate.getTime()-new Date(b.JsonDate.getTime()).reverse();在值为9之前工作正常,在值大于10时中断,请帮助我如何使其在值大于10时工作,我尝试使用“>”签名,但未按预期工作。看起来您希望按日期对象对数组进行排序。您可以按照说明进行日期-时间转换。如果要查找其他内容,请告诉我:)
console.log(2 > 11) //result is false
console.log("2" > "11") //result is true