js数组的sort()
方法对数组进行排序,不开辟新的内存,对原有数组元素进行调换,通常情况下我都只用它的默认形式,也就是不传参直接调用的方式,例如:
[5,2,6,4,1,2].sort()
// [1,2,2,4,5,6]
['5','12','0','23','13','2','32'].sort()
// ['0','12','13','2','23','32','5']
// 字符串比较的时候会相应位上的字符串进行比较
如果要对比两个对象呢?就要用到sort()
的传参了,sort()
的参数是可选的,但是,如果选了就必须传函数进去,例如:
const ARR_DATA=[
{name: 'yuan', age: 23},
{name:'lin',age:24},
{name: 'shu', age:26}
]
ARR_DATA.sort(function(obj1,obj2){console.log(obj1,obj2)})
打印的值中可以看出作为参数的函数默认接收到的参数就是需要对比的对象,下面实例是根据对象的name
属性值进行排序:
function createComparisonFunction(propertyName){
return function(object1, object2){
let value1 = object1[propertyName]
let value2 = object2[propertyName]
if(value1 < value2){
return -1
}else if(value1 > value2){
return 1
}else {
return 0
}
}
}
const ARR_DATA=[
{name: 'yuan', age: 23},
{name:'lin',age:24},
{name: 'shu', age:26}
]
console.log(ARR_DATA.sort(createComparisonFunction('name')))
// [{name:'lin',age:24},{name: 'shu', age:26},{name: 'yuan', age: 23}]