对数组进行排序,可以用sort()方法,按照数组中元素的首字母或者数字大小进行排序:
var arr = [2,5,13,7,4,9,1];
//默认排序按照字符编码排序
arr.sort();
console.log(arr); //[1, 13, 2, 4, 5, 7, 9]
//如果想对数组按照大小进行排序,则需传入参数(比较函数)
//升序排列
arr.sort((a,b)=>{
return a-b; //返回值结果大于0,两数交换顺序
})
console.log(arr); //[1, 2, 4, 5, 7, 9, 13]
//降序排列
arr.sort((a,b)=>{
return b-a; //返回值结果大于0,两数交换顺序
})
console.log(arr); //[13, 9, 7, 5, 4, 2, 1]
比较函数compare返回值特点:
返回值大于0,两数交换顺序;
返回值小于等于0,两数位置不变;
以上规则得出的排序结果是升序的,如果想要得到降序的结果,则在比较结果大于0时返回小于0的结果,比较结果小于0时返回大于0的结果即可。
对象数组如何根据某个属性sort排序?
var data = [
{name: "Bruce", age: 23, id: 16, score: 80},
{name: "Alice", age: 24, id: 12, score: 90},
{name: "David", age: 21, id: 11, score: 70},
{name: "Cindy", age: 22, id: 10, score: 100},
];
data.sort(compareUp("age"));
data.sort(compareDown("age"));
// 升序排序
function compareUp(propertyName) {
if ((typeof data[0][propertyName]) != "number") { // 属性值为非数字
return function(object1, object2) {
var value1 = object1[propertyName];
var value2 = object2[propertyName];
return value1.localeCompare(value2);
}
}
else { // 属性值为数字
return function(object1, object2) {
var value1 = object1[propertyName];
var value2 = object2[propertyName];
return value1 - value2;
}
}
}
// 降序排序
function compareDown(propertyName) {
if ((typeof data[0][propertyName]) != "number") { // 属性值为非数字
return function(object1, object2) {
var value1 = object1[propertyName];
var value2 = object2[propertyName];
return value2.localeCompare(value1);
}
}
else { // 属性值为数字
return function(object1, object2) {
var value1 = object1[propertyName];
var value2 = object2[propertyName];
return value2 - value1;
}
}
}