在JavaScript、TypeScript或Node.js中对一个对象数组进行排序

357 阅读2分钟

对数据进行排序是应用程序中的一项基本任务。例如,前台的数据列表中包含了根据给定的列对数据进行排序的方法。另外,你可能想对数据进行升序或降序排序。

本教程告诉你如何通过一个属性值对一个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')  

针对不同数据类型的细粒度排序控制

在对数据进行排序时,你通常需要更细粒度的控制。例如,比较字符串值意味着你需要考虑比较大小写敏感或不敏感,因为小写和大写字符的处理方式不同。

享受排序的乐趣!