javascript-根据数组中的一个属性或多个属性对数组进行排序

一、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]

 图例说明:

猜你喜欢

转载自blog.csdn.net/m0_53206841/article/details/128004679