sort两次按条件排序,允许条件变更再次排序。

关于sort排序规则,以及多次连续排序

// 这样排序函数调用 传入你需要比排序的字段名
xx.sort(this.compare(‘PeriodName’, ‘PeriodicalName’)

  compare<T>(property: string, PeriodicalName: string): T {
    const that = this;
    // tslint:disable-next-line:only-arrow-functions
    return function(a: any, b: any): number {
      // 在第一条件排好序的基础下 第二条件开始排序
      if (a[property] === b[property]) {
        // @ts-ignore
        if (that.filterArrayPrdcl(a.PeriodicalName,this. ArryPeriodical) > that.filterArrayPrdcl(b.PeriodicalName, this.ArryPeriodical)) {
          return 1;
        }
        // @ts-ignore
        else if (that.filterArrayPrdcl(a.PeriodicalName, ArryPeriodical) < that.filterArrayPrdcl(b.PeriodicalName, ArryPeriodical)) {
          return -1;
        } else {
          return 0;
        }
      } else {
        if (a[property] > b[property]) {
          return -1;
        } else {
          return 1;
        }
      }
    };
  }

 // 第二个要比较的字段,这里因为第二字段是另外的配置文件(ArryPeriodical是读的配置json)来使用的,可以为他配置默认排序的一个编号 如[{PeriodicalName:'xxxx',sort:1},...] 来对sort的判断使用  如图:1-1配置。
 
// *** 其实这里不该这样单个传入,再返回序号上面又做判断的,更好的就是直接上面 a,b参数当数组都传入,直接找到并比较后直接 给出排序  
  private filterArrayPrdcl(PeriodicalName: string, ArryPeriodical: Array<PrdclOptionItem>): number {
    return ArryPeriodical.filter(item => {
    // 传入的 PeriodicalName值对应配置文件的Name值
      return item.Name === PeriodicalName;
    })[0].sort;
  }

图:1-1 ,配置文件作用:

  • 一是做统一处理默认
  • 二是这个排序允许页面上自己手动调整顺序,再根据sort来排序,


页面上的调动配置文件数据排序,数据交换以及sort顺序

    if (typeName === 'sort') {
      // 为价格库设置 排序方式
      if (!typeOption) {
          [OrigData[i].sort, OrigData[i - 1].sort] = [OrigData[i - 1].sort, OrigData[i].sort];
      } else {
          [OrigData[i].sort, OrigData[i + 1].sort] = [OrigData[i + 1].sort, OrigData[i].sort];
      }
      // 交换两条数据位置 typeOption( 0:下移,1:上移)控制上移还是下移
      OrigData[i] = OrigData.splice(!typeOption ? i - 1 : i + 1, 1, OrigData[i])[0];
    }

为此满足了在第一条件排好序后,再根据第二条件排序(允许第二条件变化顺序又再次排序)。达到最后结果数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值