对数据进行排序是应用程序中的一项基本任务。例如,前台的数据列表中包含了根据给定的列对数据进行排序的方法。另外,你可能想对数据进行升序或降序排序。
本教程告诉你如何通过一个属性值对一个JavaScript对象数组进行排序,而不考虑该属性的类型。
在JavaScript中对一个对象数组进行排序
在JavaScript中对数据进行排序遵循一个模式。JavaScript提供了一个Array#sort 方法,接受一个比较器函数。这个比较器函数给你两个项目进行比较。函数内部的比较决定了返回值,而返回值又定义了排序顺序(升序或降序)。
下面是JavaScript的Array#sort 方法的更多细节:你会在提供给排序方法的回调函数中收到两个项目。然后返回值定义了第一个项目是否在引用之前,引用之后,或者它们是否相同(保持顺序):
- 返回一个负值(通常是
-1):a在前。b - 返回一个正值(通常是
1):a在后。b - 返回零值 (
0):a等于b
array.sort((a, b) => {
// the return value defines the sort order
})
例子:按对象属性排序
下面是一个可以通过不同属性进行排序的用户样本列表。用户对象中的每个属性都有不同的类型。
const users = [
{ id: 2, name: 'Marcus' },
{ id: 1, name: 'Christian' },
{ id: 3, name: 'Norman' }
]
下面是一个按属性对对象数组进行排序的一般方法。比较属性值以确定哪一个比另一个小,然后返回1 或-1 。
users.sort((a, b) => {
return a.name >= b.name
? 1
: -1
})
你可以将这种排序方式包装成一个函数,允许你动态地切换属性。
function sortUsersBy(property) {
return users.sort((a, b) => {
return a[property] >= b[property]
? 1
: -1
})
}
你可以像这样按名字对用户数组进行排序。
const sortedUsersByName = sortUsersBy('name')
针对不同数据类型的细粒度排序控制
在对数据进行排序时,你通常需要更细粒度的控制。例如,比较字符串值意味着你需要考虑比较大小写敏感或不敏感,因为小写和大写字符的处理方式不同。
享受排序的乐趣!