Mir*_*une 5 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})
Run Code Online (Sandbox Code Playgroud)
结果的初始顺序是“alex, ben, dan”。现在我想按年龄对这个数组进行排序,所以最年长的人排在第一位。排序后的顺序应该是“ben, dan, alex”。我如何以最简单的方式实现这一目标?
Nic*_*ons 10
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);Run Code Online (Sandbox Code Playgroud)
或者,如果您对析构不满意,您可以使用常规点符号来访问该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);Run Code Online (Sandbox Code Playgroud)
.sort工作方式由您从传入的回调函数返回的内容定义。如果您返回:
<= -1然后a会来之前b。0然后保持a和b在相同的位置>= 1然后b会在之前a因此,通过计算两个年龄之间的差异,这“自然地”给出了正确的值来正确地对数组进行排序。
感谢大家。我通过使用这个选项解决了这个问题:
data.sort(function(a, b) { return b.score - a.score })
Run Code Online (Sandbox Code Playgroud)
ES6
myarray.sort((a,b) => b.age - a.age)
Run Code Online (Sandbox Code Playgroud)
ES5
myarray.sort(function(a,b){return b.age - a.age})
Run Code Online (Sandbox Code Playgroud)
排序功能的详细描述可以在这里找到 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
*编辑为按照 OP 要求按降序排序
myarray.sort((a,b) => b.age - a.age)
Run Code Online (Sandbox Code Playgroud)
是正确的答案,但没有人帮助解决OP很难理解排序的问题。传递给 sort 的函数是比较函数,当比较数组的两个元素时,如果 a 在先,则应返回小于 0 的值;如果相等则返回 0;如果 b 在先,则返回大于 0 的值。
我在我的项目中使用这个默认比较器函数
defaultCompare = (a, b) => (!a && !b ? 0 : !a ? -1 : !b ? 1 : a < b ? -1 : a > b ? 1 : 0);
Run Code Online (Sandbox Code Playgroud)
因为未定义、null、NaN 和其他错误值可能会给你带来麻烦。
| 归档时间: |
|
| 查看次数: |
4523 次 |
| 最近记录: |