JS数组多条件排序基于Array.sort()方法,首先要了解sort()方法的用法。
sort()方法可以传入一个函数作为参数,然后依据该函数的逻辑,进行数组的排序。
eg:
sort()方法接收函数作为参数时,排序主要根据传入函数的返回值是否大于0进行排序。
1)当 a-b <0时,则a元素排在b元素的前面;(a、b元素位置不变)
2)当a-b= 0时,a,b元素的位置不变;
3)当a-b >0时,则b元素排在a元素的前面。(a、b元素位置交换)
当数组元素为对象时,若要根据对象的多个属性进行排序,就涉及到多条件排序。
对字符串数组排序很简单,只需要直接用sort()即可,这是它的默认排序方式(按字符顺序或者说按字符的ASCII码顺序):var a = ["666", "123", "4", "88", "1111"]
alert(a.sort()) //1111,123,4,666,88
如果是数值数组,也直接使用sort()的话,也是按字符方式来排序的,需要给sort提供一个自定义的排序规则函数才能实现按数值大小排序:
var a = [666, 123, 4, 88, 1111]
alert(a.sort()) //1111,123,4,666,88
alert(a.sort(function(a, b){return a-b})) //4, 88, 123, 666, 1111
如果是对象数组,要根据对象中一个共同的属性值来排序,则情况要复杂得多,需要定义一个比较函数来实现:
var a = [{"name":"张三", "age":34}, {"name":"李四", "age":28}, {"name":"王五", "age":45}, {"name":"赵六", "age":37}]
a.sort(function(n){
return function(o,p){
var a,b
if(typeof o==="object"&&typeof p==="object"&&o&&p){
a=o[n]
b=p[n]
if(a===b)return 0
if(typeof a===typeof b)return a<b?-1:1
return typeof a<typeof b?-1:1
}else{
throw "error"
}
}
}("age")) //排序结果此略