js 数组排序sort()

一、默认数组排序 

var arr = [1,8,5,4,9]
arr.sort()
console.log(arr) //[1,4,5,8,9]

var arr2 = [1,4,2,11,21,6,8]
arr2.sort()
console.log(arr2) //[1,11,2,21,4,6,8]

var arr3 = ['a','B','b','A']
arr3.sort()
console.log(arr3) //['A','B','a','b']

 由上可以看出sort()默认是将数组中的元素按ASCII码值进行由小到大排序

如果要正常的从小到大排序,可以在sort()参数中写一个比较函数

var arr = [2,4,5,23,31,7]
//比较函数
var fun = function(x,y){
  if(x<y){
    return -1
  } else if(x>y){
    return 1
  } else {
    return 0
  }
}
console.log(arr.sort(fun))//[2,4,5,7,23,31]

//从大到小
var fun2 = function(x,y){
  if(x<y){
    return 1
  } else if(x>y){
    return -1
  } else {
    return 0
  }
}
console.log(arr.sort(fun2))//[31,23,7,5,4,2]

二、数组对象排序

 如果数组元项是对象,就需要根据数组项的某个属性进行比较排序

var arr = [{name:"aaa", age:11},{name:"bbb", age:15}]
var compare = function (obj1, obj2) {
    var val1 = obj1.name //指定属性比较
    var val2 = obj2.name
    if (val1 < val2) {
        return -1
    } else if (val1 > val2) {
        return 1
    } else {
        return 0
    }            
} 
console.log(arr.sort(compare))
// [{name:"bbb", age:15},{name:"aaa", age:11}]

// 传入指定属性进行比较
var compare = function (prop) {
    return function (obj1, obj2) {
        var val1 = obj1[prop];
        var val2 = obj2[prop];if (val1 < val2) {
            return -1;
        } else if (val1 > val2) {
            return 1;
        } else {
            return 0;
        }            
    } 
}
console.log(arr.sort(compare("age")))
// [{name:"bbb", age:15},{name:"aaa", age:11}]

遇到一种情况如:数组是[{name:'aaa',age:21},{name:'ccc',age:5},{name:'bbb',age:32}],但输出结果为:[{name:'ccc',age:5},{name:'bbb',age:32},{name:'aaa',age:21}]

这按从大到小的排序来看是出现了混乱,但实质上是因为传进来的属性是string类型,那么排序就会使用ASCII码进行比较,解决这种情况只需要把类型转化为number类型就可以了

var arr=[{name:'aaa',age:21},{name:'bbb',age:32},{name:'ccc',age:5}]
// 加入类型转换
var compare = function (prop) {
    return function (obj1, obj2) {
        var val1 = obj1[prop];
        var val2 = obj2[prop];
        if (!isNaN(Number(val1)) && !isNaN(Number(val2))) {
            val1 = Number(val1);
            val2 = Number(val2);
        }
        if (val1 < val2) {
            return -1;
        } else if (val1 > val2) {
            return 1;
        } else {
            return 0;
        }            
    } 
}

console.log(arr.sort(compare('age')))
// [{name:'bbb',age:32},{name:'aaa',age:21},{name:'ccc',age:5}]

此文是因为自己记性不太好经常忘记一下js数组方法的使用,方便查找使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值