table数据排序时,如果某一对象的值未定义,就会导致排序出现问题

现象 :

                table数据排序时,如果某一对象的值未定义,就会导致排序出现问题。

原因:

                '小燕' > undefined  // false

                '小燕' < undefined  // false

                 '小燕' > null  // false

                '小燕' < null  // false

var arr = [{
                id: 1,
                user:'小燕',
                color:'red'
            },
            {
                id: 2,
                color:'green'
            },
            {
                id: 3,
            },
            {
                id: 5,
                user:'小燕',
                color:'green'
            },
            {
                id: 4,
                user:'小伟'
            }]
        function compare(pro, order = 'asc') {
          return (obj1, obj2) => {
            let val1 = obj1[pro] 
            let val2 = obj2[pro] 
            console.log(val1 < val2, 'val1 < val2')
            if (val2 < val1) { // 正序
              return 1
            } else if (val2 > val1) {
              return -1
            } else {
              return 0
            }
          }
        }
        arr.sort(this.compare('user'))
        console.log(arr)

修复方法:

 // let val1 = typeof(val1) ==='undefined' ? val1 : '';
 // let val2 = typeof(val2) ==='undefined' ? val2 : '';



function compare(pro, order = 'asc') {
   return (obj1, obj2) => {
        let param1 = obj1[pro]
        let param2 = obj2[pro]
        if (obj1[pro] !== 0) param1 = obj1[pro] || ''
        if (obj2[pro] !== 0) param2 = obj2[pro] || ''
        // 如果两个参数均为字符串类型
        if (typeof param1 === 'string' && typeof param2 === 'string') {
          return param1.localeCompare(param2)
        }
        // 如果参数1为数字,参数2为字符串
        if (typeof param1 === 'number' && typeof param2 === 'string') {
          return -1
        }
        // 如果参数1为字符串,参数2为数字
        if (typeof param1 === 'string' && typeof param2 === 'number') {
          return 1
        }
        // 如果两个参数均为数字
        if (typeof param1 === 'number' && typeof param2 === 'number') {
          if (param1 > param2) return 1
          if (param1 === param2) return 0
          if (param1 < param2) return -1
        } 
   }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值