Javascript 中数组 sort 方法分析(含面试题)

in 默认分类 with 0 comment

背景

以下是一道面试题

const list = [
  {rank: null, name: 'james', age: 22},
  {rank: 3, name: 'marry', age: 22},
  {rank: 3, name: 'tom', age: 30},
  {rank: null, name: 'james', age: 22},
  {rank: 5, name: 'tim', age: 2},
]

// sort
// rank 小 到 大, null 放最后
// rank 相等,age 大到小
// name 小 到 大

要求是把 list 数组根据相关的要求 使用 sort 方法进行排序
方法:

function sortByRule (a, b) {
  let rull = 0
  if (b.rank === null) {
    rule = -1
  }
  else if (a.rank < b.rank) {
    rule = a.name - b.name
  }
  else if (a.rank === b.rank) {
    rule = b.age - a.age
  } else {
    rule = a.rank - b.rank
  }

  return rule
}

list.sort(sortByRule)

结果:
result

Usage

sort 方法针对于数组排序,排序规则是一个方法:

Array.sort(sortFunction)

排序方法传入两个元素,对于元素内的数据进行计算处理,返回 -1,1 两个值,其中,-1 表示交换位置,1表示不交换位置。
return 的值,在 sort 中主要使用 <0 或者 >=0 作为标识,所以如果你的值刚好是算出来的,也不必转成 -1 或者 1.

function sortFunction (a, b) {
  return a - b
}
Comments are closed.