是否可以根据javascript中的另一个对象对排序后的数组进行排序?

时间:2017-05-29 14:33:51

标签: javascript arrays sorting

我按类型排序这种类型的数组:

const bands = [ 
  { genre: 'Rap', band: 'Migos', albums: 2},
  { genre: 'Pop', band: 'Coldplay', albums: 4, awards: 10},
  { genre: 'Pop', band: 'xxx', albums: 4, awards: 11},
  { genre: 'Pop', band: 'yyyy', albums: 4, awards: 12},
  { genre: 'Rock', band: 'Breaking zzzz', albums: 1}
  { genre: 'Rock', band: 'Breaking Benjamins', albums: 1}
];

有了这个:

function compare(a, b) {
  // Use toUpperCase() to ignore character casing
  const genreA = a.genre.toUpperCase();
  const genreB = b.genre.toUpperCase();

  let comparison = 0;
  if (genreA > genreB) {
    comparison = 1;
  } else if (genreA < genreB) {
    comparison = -1;
  }
  return comparison;
}

描述here 但按照类型排序后,我还想按照专辑的数量对其进行排序。这可能吗? TIA

2 个答案:

答案 0 :(得分:1)

function compare(a, b) {
// Use toUpperCase() to ignore character casing
const genreA = a.genre.toUpperCase();
const genreB = b.genre.toUpperCase();

return genreA.localeCompare(genreB) || a.albums-
b.albums;
}

我将您的代码缩短为genreA.localeCompare(genreB)。如果它是0,则流派是相同的,因此我们将根据专辑的数量进行比较。

如果0取......则由OR运算符提供......

答案 1 :(得分:0)

当然,在您完成了对第一个阵列所需的任何操作之后。假设您不想修改第一个数组,可以使用切片进行复制。然后您可以按专辑编号排序。如果有帮助,请告诉我

const bands = [{
    genre: 'Rap',
    band: 'Migos',
    albums: 2
  },
  {
    genre: 'Pop',
    band: 'Coldplay',
    albums: 4,
    awards: 10
  },
  {
    genre: 'Pop',
    band: 'xxx',
    albums: 4,
    awards: 11
  },
  {
    genre: 'Pop',
    band: 'yyyy',
    albums: 4,
    awards: 12
  },
  {
    genre: 'Rock',
    band: 'Breaking zzzz',
    albums: 1
  },
  {
    genre: 'Rock',
    band: 'Breaking Benjamins',
    albums: 1
  }
];


var sortedAlbumNumber = bands.slice();

sortedAlbumNumber.sort((a, b) => a['albums'] - b['albums']);

console.log(sortedAlbumNumber);