首页 > 解决方案 > 根据对象内部的数字对对象数组进行排序,然后根据对象内部的字符串进行排序

问题描述

我知道我可以制作一个算法来对我拥有的数组进行排序,但我想知道最好和最优化的方法

这是我现在拥有的数组,我想根据年份对其进行排序,这样 2021 年的值将首先出现,然后是 2022 年,依此类推,然后我想相对于月份进行排序,这样最终的数组就像

[
 0: {month:'Aug', year:2021},
 1: {month:'Jul', year:2022},
 2: {month:'May', year:2100},
]

参考对象

我的数组长度也永远不会超过 12

标签: javascriptarraysreactjssortingjavascript-objects

解决方案


const arr = [
  { month: "Aug", year: 2021 },
  { month: "Jul", year: 2022 },
  { month: "May", year: 2100 },
];

const months = {
  Jan: 1,
  Feb: 2,
  Mar: 3,
  Apr: 4,
  May: 5,
  Jun: 6,
  Jul: 7,
  Aug: 8,
  Sep: 9,
  Oct: 10,
  Nov: 11,
  Dev: 12,
};

arr.sort((a, b) => {
  if (a.year < b.year) return -1;
  else if (a.year === b.year) {
    return months[a.month] - months[b.month];
  } else return 1;
});

console.log(arr);

也可以简化为

arr.sort((a, b) => {
  if (a.year === b.year) {
    return months[a.month] - months[b.month];
  } else return a.month - b.month;
});

感谢georg的简洁建议(我个人喜欢这种简洁性)

const arr = [
  { month: "Aug", year: 2021 },
  { month: "Jul", year: 2022 },
  { month: "May", year: 2100 },
];

const months = {
  Jan: 1,
  Feb: 2,
  Mar: 3,
  Apr: 4,
  May: 5,
  Jun: 6,
  Jul: 7,
  Aug: 8,
  Sep: 9,
  Oct: 10,
  Nov: 11,
  Dev: 12,
};

arr.sort((a, b) => a.year - b.year || months[a.month] - months[b.month]);

console.log(arr);


推荐阅读