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

JavaScript:按每个对象中的数字属性对对象数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我很难理解如何使用array.sort()方法根据每个对象中的数值对对象数组进行排序。基本上,我有一个如下形式的场景: var myarray = [] myarray.push({name: "alex", age: 8}) myarray.push({name: "ben", age: 57}) myarray.push({name: "dan", age: 32}) 结果的最初顺序是“亚历克斯、本、丹”。现在我想按年龄对这个数组进行排序,所以最年长的人排在列表的第一位。排序后,顺序应为“

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

var myarray = []
myarray.push({name: "alex", age: 8})
myarray.push({name: "ben", age: 57})
myarray.push({name: "dan", age: 32})
结果的最初顺序是“亚历克斯、本、丹”。现在我想按年龄对这个数组进行排序,所以最年长的人排在列表的第一位。排序后,顺序应为“本、丹、亚历克斯”。如何以最简单的方式实现这一点?

您可以使用以下方法:

var myarray=[]
myarray.push({姓名:“alex”,年龄:8})
myarray.push({姓名:“ben”,年龄:57})
push({姓名:“dan”,年龄:32});
var res=myarray.sort({age:a},{age:b})=>b-a);
控制台日志(res)ES6

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

myarray.sort(function(a,b){return b.age - a.age})
有关排序功能的详细说明,请参见此处

*编辑以按OP要求的降序排序

myarray.sort((a,b) => b.age - a.age)
这是正确的答案,但没有人帮助解决OP的问题,即理解困难。传递给sort的函数是一个比较函数,当比较数组的两个元素时,如果a优先,则返回的值应小于0;如果它们相等,则返回的值应小于0;如果b优先,则返回的值应大于0

我在项目中使用此默认比较器函数

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

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

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

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

这有不正确的输出-它应该是
ben
dan
alex
,如问题所示。我认为破坏为新手增加了不必要的复杂性。age=>age.b-age.a使它更容易阅读。@AdrianBrand是的,我可以看到。我已经添加了另一个可能的副本