javascript-根据数组中的一个属性或多个属性对数组进行排序
admin
2024-02-09 22:56:48

一、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; iarr[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]

相关内容

热门资讯

山水皆有情!丽江两山一江的千年... 去过丽江、走过虎跳峡的人,大概率都听过哈巴雪山和金沙江的传说。很多人站在峡谷之下,望着奔腾不息的金沙...
活力中国调研行丨“殷”你而来 ... 9月12日,游客在殷墟博物馆“甲骨文展厅”内参观。位于河南省安阳市的殷墟博物馆新馆是首个全景式展现商...
浦江之夜赴美好相逢,第37届上... 9月12日晚,黄浦江畔灯火璀璨,第37届上海旅游节大巡游在外滩中山东一路上演。不少观众早早便来到外滩...
美丽中国丨秋韵紫鹊界 梯田入画... 这是9月11日拍摄的紫鹊界梯田(无人机照片)。 金秋九月,湖南省娄底市新化县紫鹊界梯田稻谷渐次成熟。...
中国之巅奏响《共同的节日》,千... 千吨阻尼器,“迎世赛、游上海旅游节”。9月13日,由上海市文化和旅游局指导推出上海旅游·会客│巅峰之...