一、javascript-sort()方法
定义:
sort() 方法用于对数组的元素进行排序。排序顺序可以是字母或数字,可以升序或降序。
默认排序顺序为按字母升序。使用数字排序,必须通过一个函数来指定排序规则且作为参数来调用。
需要注意的是:该方法返回的是排序后的新数组,改变原数组
原理:
浏览器会根据回调函数的返回值来决定元素的顺序,如果返回一个大于0的值,则元素会交换位置,如果返回一个小于0的值,则元素位置不变,如果返回一个0,则认为两个元素相等,不交换位置。
实例:
简单的数组排序:
实例1:字母升序
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();fruits 输出结果:
Apple,Banana,Mango,Orange
实例2:字母降序
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
fruits.reverse();//数组反转fruits输出结果:
Orange,Mango,Banana,Apple
实例3: 数字升序
var points = [40,100,1,5,25,10];
points.sort(function(a,b){return a-b});fruits输出结果:
1,5,10,25,40,100
实例4:数字降序:
var points = [40,100,1,5,25,10];
points.sort(function(a,b){return b-a});fruits输出结果:
100,40,25,10,5,1
(或在升序排列后使用reverse()方法进行顺序反转)
数组对象排序:
如果是数组对象中的某个属性,只需要指定一个回调函数来作为参数调用,通过该回调函数的返回值来进行数组排序:
实例:将数组中的对象按age属性的大小升序排列
var person=[
{name:"小明",age:19},
{name:"小红",age:18},
{name:"小军",age:21},
{name:"小兰",age:20}]
function compare(property) {
return function (obj1, obj2) {
var value1 = obj1[property];
var value2 = obj2[property];
return value1 - value2; // 升序
};
}
var newArr=person.sort(compare("age"));
排序后的内容为:
[{name:"小红",age:18},
{name:"小明",age:19},
{name:"小兰",age:20},
{name:"小军",age:21}]
数组对象中的多属性排序:
同样的,该方法不只适用于对数组方法中的单属性进行判断排序,也可对多个属性进行排序,当我们比较的第一个属性差值为0时,再进行第二个属性的比较,并通过返回值进行sort的排序即可。
举一个简单的例子来说明:
var data=[
{year:1999,month:10},
{year:2000,month:6},
{year:2000,month:10},
{year:1999,month:6}]
function compare(property1,property2) {
return function (obj1, obj2) {
var year1 = obj1[property1];
var year2 = obj2[property1];
var month1= obj1[property2];
var month2= obj2[property2];
if(year1-year2==0){
return month1 -month2;// 月份升序
}else{
return year1 -year2; // 年份升序
}
};
}
var newData = data.sort(compare("year","month"));
排序后的数组为:
[{"year": 1999, "month": 6},
{"year": 1999,"month": 10},
{"year": 2000,"month": 6},
{"year": 2000,"month": 10}]
二、冒泡排序
原理:通过两层循环,每轮比较相邻的两个元素,如果前一个元素比后一个元素大,则交换位置,使得最大的元素放置在数组末尾,并进行下一轮循环,比较其余元素,以此实现数组的逐步排序。
实例:
var arr = [6,3,4,7,5,2,1];
for (var i = 0; i<arr.length; i++) {
for (var j =0;j<arr.length-i; j++) {
if(arr[j]>arr[j+1]){
var temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
console.log(arr); //[1, 2, 3, 4, 5, 6, 7]
图例说明: