代码之家  ›  专栏  ›  技术社区  ›  MirceaKitsune

JavaScript:根据每个对象中的数字属性对对象数组进行排序

  •  2
  • MirceaKitsune  · 技术社区  · 6 年前

    var myarray = []
    myarray.push({name: "alex", age: 8})
    myarray.push({name: "ben", age: 57})
    myarray.push({name: "dan", age: 32})
    

    结果的最初顺序是“亚历克斯,本,丹”。现在我想按年龄对这个数组排序,所以最年长的人排在列表的第一位。排序后的顺序应该是“本,丹,亚历克斯”。如何以最简单的方式实现这一点?

    4 回复  |  直到 6 年前
        1
  •  7
  •   Community CDub    5 年前

    destructuring assignment 以及 .sort

    var myarray = []
    myarray.push({name: "alex", age: 8})
    myarray.push({name: "ben", age: 57})
    myarray.push({name: "dan", age: 32});
    
    var res = myarray.sort(({age:a}, {age:b}) => b-a);
    console.log(res);

    或者,如果你不喜欢破坏,你可以使用常规的 dot notation 访问 age

    var myarray = []
    myarray.push({name: "alex", age: 8})
    myarray.push({name: "ben", age: 57})
    myarray.push({name: "dan", age: 32});
    
    var res = myarray.sort((a, b) => b.age-a.age);
    console.log(res);

    顺便说一句 works由您从传入的回调函数返回的内容定义。如果您返回:

    • <= -1 a b .
    • 0 那就继续 b类 在相同的位置
    • >= 1 然后 将在前面出现

    因此,通过计算这两个年龄段之间的差异,这个“自然”会给出正确的值来对数组进行正确排序。

        2
  •  5
  •   G_conn    6 年前

    欧洲标准6

    myarray.sort((a,b) => b.age - a.age)
    

    myarray.sort(function(a,b){return b.age - a.age})
    

    排序函数的详细描述可以在这里找到 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

    *按操作要求按降序排序

        3
  •  4
  •   Adrian Brand    6 年前
    myarray.sort((a,b) => b.age - a.age)
    

    我在我的项目中使用这个默认的比较器函数

    defaultCompare = (a, b) => (!a && !b ? 0 : !a ? -1 : !b ? 1 : a < b ? -1 : a > b ? 1 : 0);
    

    作为未定义的值,null、NaN和其他错误值可能会给您带来麻烦。

        4
  •  1
  •   MirceaKitsune    6 年前

    谢谢大家。我用这个选项解决了这个问题:

    data.sort(function(a, b) { return b.score - a.score })