如何解决根据对象内部的数字然后根据对象内部的字符串对对象数组进行排序
我知道我可以制作一个算法来对我拥有的数组进行排序,但我想知道最好和最优化的方法
这是我现在拥有的数组,我想根据年份对它进行排序,以便 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",b) => a.year - b.year || months[a.month] - months[b.month]);
console.log(arr);
您可以使用函数 Array.prototype.sort()
,它将比较函数作为参数:
const months = [
"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",];
const array = [
{ month: "Aug",{ month: "Jan",];
console.log(
array.sort((item1,item2) =>
item1.year === item2.year
? months.indexOf(item1.month) - months.indexOf(item2.month)
: item1.year - item2.year
)
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。