首页 > 解决方案 > JavaScript:按每个对象中的数字属性对对象数组进行排序

问题描述

我很难理解如何使用 array.sort() 方法根据在每个对象中找到的数值对对象数组进行排序。基本上我有以下形式的场景:

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

结果的初始顺序是“alex, ben, dan”。现在我想按年龄对这个数组进行排序,所以最老的人排在第一位。排序后的顺序应该是“ben, dan, alex”。我如何以最简单的方式实现这一目标?

标签: javascriptarrayssorting

解决方案


您可以使用解构赋值和如下.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);

或者,如果您对破坏感到不舒服,您可以使用常规点符号来访问该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);

工作方式.sort由您从传入的回调函数返回的内容定义。如果您返回:

  • <= -1然后a会来之前b
  • 0然后保持ab在相同的位置
  • >= 1然后b会来之前a

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


推荐阅读