前端在开发过程中经常遇到排序问题,那么如何对数组内对象的某个属性排序呐
封装方法compare
对于需要排序的数组只需要将属性名传递给compare,然后运用arr.sort()排序即可
var arr = [{rate:7,name:'小红'},{rate:4,name:'小蓝'},{rate:9,name:'小绿'}]
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;
}
}
}
arr.sort(compare("rate"))
原理
使用了一个自定义的比较函数 compare
来对数组 arr
进行排序。排序的依据是对象的 "rate"
属性值。
首先,compare
函数接受一个 prop
参数,表示要根据哪个属性进行比较。它返回了一个匿名函数,这个匿名函数作为实际的比较函数,用于 sort()
方法进行排序。
在匿名函数内部,首先获取了 obj1
和 obj2
对象的 prop
属性值,并将其赋给 val1
和 val2
变量。如果这两个值都可以转换为数值类型(通过 isNaN
函数判断),则将它们转换为数值类型。
然后,根据 val1
和 val2
的值进行比较。如果 val1
大于 val2
,则返回 -1,表示 obj1
应该排在 obj2
前面;如果 val1
小于 val2
,则返回 1,表示 obj2
应该排在 obj1
前面;如果 val1
等于 val2
,则返回 0,表示两者相等。
最后,通过调用 arr.sort(compare("rate"))
来对数组进行排序。这里使用了 "rate"
属性作为比较的依据。
请注意,这段代码中的排序方式是按照数值大小进行降序排序。如果您想要按照其他属性进行排序,只需将 "rate"
参数替换为其他属性名即可。另外,如果您想要按照升序排序,只需将 -1
和 1
的返回值调换位置即可。