数组按属性值排序

使用 sort() 方法对对象数组按指定属性进行排序

问题

对以下数组根据 born 属性值进行降序排列:

const singers = [
  { name: 'Steven Tyler', band: 'Aerosmith', born: 1948 },
  { name: 'Karen Carpenter', band: 'The Carpenters', born: 1950 },
  { name: 'Kurt Cobain', band: 'Nirvana', born: 1967 },
  { name: 'Stevie Nicks', band: 'Fleetwood Mac', born: 1948 },
];

解答

使用 Array.prototype.sort() 方法,传入比较函数即可实现排序。该方法会原地修改数组并返回排序后的数组。

// 方法一:完整的比较函数
function compare(a, b) {
  return a.born < b.born ? 1 : -1;
}

singers.sort(compare);

// 方法二:箭头函数简写(推荐)
singers.sort((a, b) => b.born - a.born);

排序后的结果:

[
  { name: 'Kurt Cobain', band: 'Nirvana', born: 1967 },
  { name: 'Karen Carpenter', band: 'The Carpenters', born: 1950 },
  { name: 'Steven Tyler', band: 'Aerosmith', born: 1948 },
  { name: 'Stevie Nicks', band: 'Fleetwood Mac', born: 1948 }
]

关键点

  • sort() 方法会原地修改原数组,不会创建新数组
  • 比较函数返回负数时,a 排在 b 前面;返回正数时,b 排在 a 前面
  • 降序排序使用 b - a,升序排序使用 a - b
  • 箭头函数写法更简洁,适合简单的数值比较