• 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属性的大小升序排列

    1. var person=[
    2. {name:"小明",age:19},
    3. {name:"小红",age:18},
    4. {name:"小军",age:21},
    5. {name:"小兰",age:20}]
    6. function compare(property) {
    7. return function (obj1, obj2) {
    8. var value1 = obj1[property];
    9. var value2 = obj2[property];
    10. return value1 - value2; // 升序
    11. };
    12. }
    13. var newArr=person.sort(compare("age"));

    排序后的内容为:

    [{name:"小红",age:18},

    {name:"小明",age:19},

    {name:"小兰",age:20},

    {name:"小军",age:21}]

    数组对象中的多属性排序:

    同样的,该方法不只适用于对数组方法中的单属性进行判断排序,也可对多个属性进行排序,当我们比较的第一个属性差值为0时,再进行第二个属性的比较,并通过返回值进行sort的排序即可。

    举一个简单的例子来说明:

    1. var data=[
    2. {year:1999,month:10},
    3. {year:2000,month:6},
    4. {year:2000,month:10},
    5. {year:1999,month:6}]
    6. function compare(property1,property2) {
    7. return function (obj1, obj2) {
    8. var year1 = obj1[property1];
    9. var year2 = obj2[property1];
    10. var month1= obj1[property2];
    11. var month2= obj2[property2];
    12. if(year1-year2==0){
    13. return month1 -month2;// 月份升序
    14. }else{
    15. return year1 -year2; // 年份升序
    16. }
    17. };
    18. }
    19. var newData = data.sort(compare("year","month"));

    排序后的数组为:

    [{"year": 1999, "month": 6},

    {"year": 1999,"month": 10},

    {"year": 2000,"month": 6},

    {"year": 2000,"month": 10}]

    二、冒泡排序

    原理:通过两层循环,每轮比较相邻的两个元素,如果前一个元素比后一个元素大,则交换位置,使得最大的元素放置在数组末尾,并进行下一轮循环,比较其余元素,以此实现数组的逐步排序。

    实例:

    1. var arr = [6,3,4,7,5,2,1];
    2. for (var i = 0; ilength; i++) {
    3. for (var j =0;jlength-i; j++) {
    4. if(arr[j]>arr[j+1]){
    5. var temp = arr[j];
    6. arr[j]=arr[j+1];
    7. arr[j+1]=temp;
    8. }
    9. }
    10. }
    11. console.log(arr); //[1, 2, 3, 4, 5, 6, 7]

     图例说明:

     

  • 相关阅读:
    详细解读DALLE 3技术报告:Improving Image Generation with Better Captions
    vue3-组合式API
    农村污水处理站如何实现数据采集和远程监控?
    全新升级的AOP框架Dora.Interception[汇总,共6篇]
    C/C++ 查泄漏得一些方法
    使用sed命令进行文本处理示例
    独立按键控制LED亮灭、独立按键控制LED状态、独立按键控制LED显示二进制、独立按键控制LED移位——“51单片机”
    二、Spark 调度系统
    TypeScript 知识点总结
    基于二维切片图序列的三维立体建模MATLAB仿真
  • 原文地址:https://blog.csdn.net/m0_53206841/article/details/128004679