zoukankan      html  css  js  c++  java
  • 对象数组按属性排序注意事项

    一、普通数组排序:

    js中用方法sort()为数组排序。sort()方法有一个可选参数,是用来确定元素顺序的函数。如果这个参数被省略,那么数组中的元素将按照ASCII字符顺序进行排序。如:

    var arr = ["a", "b", "A", "B"];
    arr.sort();
    console.log(arr);//["A", "B", "a", "b"]

    因为字母A、B的ASCII值分别为65、66,而a、b的值分别为97、98,所以上面输出的结果是 ["A", "B", "a", "b"] 。

    如果数组元素是数字呢,结果会是怎样?

    var arr = [15, 8, 25, 3];
    arr.sort();
    console.log(arr);//[15, 25, 3, 8]

    结果是 [15, 25, 3, 8] 。其实,sort方法会调用每个数组项的toString()方法,得到字符串,然后再对得到的字符串进行排序。虽然数值15比3大,但在进行字符串比较时"15"则排在"3"前面。显然,这种结果不是我们想要的,这时,sort()方法的参数就起到了作用,我们把这个参数叫做比较函数。

    比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个之后则返回一个正数。例子:

    var arr = [23, 9, 4, 78, 3];
    var compare = function (x, y) {//比较函数
        if (x < y) {
            return -1;
        } else if (x > y) {
            return 1;
        } else {
            return 0;
        }
    }
    console.log(arr.sort(compare));        

    结果为 [3, 4, 9, 23, 78] ,返回了我们想要的结果。如果要按降序排序,比较函数写成这样即可:

    var compare = function (x, y) {
        if (x < y) {
            return 1;
        } else if (x > y) {
            return -1;
        } else {
            return 0;
        }
    }

    我们并不能用比较函数比较一个不能转化为数字的字符串与数字的顺序:

    var arr = ["b", 5];
    console.log(arr.sort(compare))

    结果是 ["b", 5] 。因为比较函数在比较时,会把先把字符串转化为数字,然后再比较,字符串b不能转化为数字,所以就不能比较大小。然而,当不用比较函数时,会比较ASCII值,所以结果是 [5, "b"] 。

    二、对象数组比较:

    对对象属性的访问,obj["key"]与obj.key都是可以的,不过,如果key值并不确定,而是一个变量的时候,则只能通过obj[key]的方式访问。

    ifacesArr = ifacesArr.sort((val1, val2) => val1["name"] > val2["name"] ? -1 : 1);

    https://blog.csdn.net/Quincylk/article/details/81742811

  • 相关阅读:
    Nginx反向代理和jetty服务器配置
    如何使用canvas绘图
    毕业后,你折腾了多久做了多少努力才找到正确的方向或者道路?
    如何提高用户逃离成本
    首次创业者必须知道哪些基本常识?
    拦截器、过滤器、监听器各有什么作用
    第一人称入行分享贴:大学混了四年,如何顺利入行互联网
    线下学习
    如何实现数组深拷贝和浅拷贝?
    从零学前端第二讲:CSS行内块级元素布局与定位
  • 原文地址:https://www.cnblogs.com/samve/p/12507313.html
Copyright © 2011-2022 走看看