javascript - 根据对象内部的数字对对象数组进行排序,然后根据对象内部的字符串进行排序
问题描述
我知道我可以制作一个算法来对我拥有的数组进行排序,但我想知道最好和最优化的方法
这是我现在拥有的数组,我想根据年份对其进行排序,这样 2021 年的值将首先出现,然后是 2022 年,依此类推,然后我想相对于月份进行排序,这样最终的数组就像
[
0: {month:'Aug', year:2021},
1: {month:'Jul', year:2022},
2: {month:'May', year:2100},
]
我的数组长度也永远不会超过 12
解决方案
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);
推荐阅读
- javascript - 无法从 Heroku 或 Replit 网站连接到存储在 aws 上的数据库。(mysql2,node.js)
- python - 自制 Discord Bot 不工作/AttributeError:“VoiceState”对象没有属性“voice”
- c# - 调用 window.open 时如何在 WPF/WebView2 应用程序中创建自定义窗口?
- android - 我可以使用 XML 来创建带有 React Native 的 UI 布局,比如 Android 吗?
- c - clockid_t 宏的数值是多少?
- python - 在 Python 中从字典中分配变量名
- c# - .net core 序列化和反序列化通用类型
- javascript - 数字与字符串数组查找
- r - 使用相同的图例将 2 个条形图合二为一
- python - Selenium Python:将密钥发送到 iframe