javascript - 根据财政年度对象排序对象
问题描述
我想根据FinanceYears 对monthYearObj进行排序
var financeYears =
[{"month":4,"year":2019,"resourceType":"Employee"},
{"month":5,"year":2019,"resourceType":"Employee"},
{"month":6,"year":2019,"resourceType":"Employee"},
{"month":7,"year":2019,"resourceType":"Employee"},
{"month":8,"year":2020,"resourceType":"Employee"},
{"month":9,"year":2020,"resourceType":"Employee"},
{"month":10,"year":2020,"resourceType":"Employee"},
{"month":11,"year":2020,"resourceType":"Employee"},
{"month":12,"year":2020,"resourceType":"Employee"},
{"month":1,"year":2020,"resourceType":"Employee"},
{"month":2,"year":2020,"resourceType":"Employee"},
{"month":3,"year":2020,"resourceType":"Employee"}]
var monthYearObj =
[{"monthStart":1,"yearStart":2020},
{"monthStart":2,"yearStart":2020},
{"monthStart":3,"yearStart":2020},
{"monthStart":4,"yearStart":2019},
{"monthStart":5,"yearStart":2019},
{"monthStart":6,"yearStart":2019},
{"monthStart":7,"yearStart":2019},
{"monthStart":8,"yearStart":2020},
{"monthStart":9,"yearStart":2020},
{"monthStart":10,"yearStart":2020},
{"monthStart":0,"yearStart":0},
{"monthStart":0,"yearStart":0}];
并希望输出如下所示,而不是{"monthStart":0,"yearStart":0}
应该有{"monthStart":11,"yearStart":2020}
和{"monthStart":12,"yearStart":2020}
分别基于 FinanceYears 对象,因为这两个月的数据缺少要添加到此处。
var finalObject = [
{"monthStart":4,"yearStart":2019},
{"monthStart":5,"yearStart":2019},
{"monthStart":6,"yearStart":2019},
{"monthStart":7,"yearStart":2019},
{"monthStart":8,"yearStart":2020},
{"monthStart":9,"yearStart":2020},
{"monthStart":10,"yearStart":2020}
{"monthStart":11,"yearStart":2020}
{"monthStart":12,"yearStart":2020}
{"monthStart":1,"yearStart":2020},
{"monthStart":2,"yearStart":2020},
{"monthStart":3,"yearStart":2020}];
正在尝试如下所示的排序功能,但似乎没有按预期工作,
monthYearObj.sort(function (a, b) {
if (a.yearStart < b.yearStart ){
return -1;
} if (a.yearStart > b.yearStart){
return 1;
}
if (a.monthStart < b.monthStart ){
return -1;
} if (a.monthStart > b.monthStart){
return 1;
}
});
所以现在我想根据financeYears对其进行排序。
解决方案
您可以将一个对象作为值并映射,以便存储值或使用给定数据创建一个新对象。
var financeYears = [{ month: 4, year: 2019, resourceType: "Employee" }, { month: 5, year: 2019, resourceType: "Employee" }, { month: 6, year: 2019, resourceType: "Employee" }, { month: 7, year: 2019, resourceType: "Employee" }, { month: 8, year: 2020, resourceType: "Employee" }, { month: 9, year: 2020, resourceType: "Employee" }, { month: 10, year: 2020, resourceType: "Employee" }, { month: 11, year: 2020, resourceType: "Employee" }, { month: 12, year: 2020, resourceType: "Employee" }, { month: 1, year: 2020, resourceType: "Employee" }, { month: 2, year: 2020, resourceType: "Employee" }, { month: 3, year: 2020, resourceType: "Employee" }],
monthYearObj = [{ monthStart: 1, yearStart: 2020 }, { monthStart: 2, yearStart: 2020 }, { monthStart: 3, yearStart: 2020 }, { monthStart: 4, yearStart: 2019 }, { monthStart: 5, yearStart: 2019 }, { monthStart: 6, yearStart: 2019 }, { monthStart: 7, yearStart: 2019 }, { monthStart: 8, yearStart: 2020 }, { monthStart: 9, yearStart: 2020 }, { monthStart: 10, yearStart: 2020 }, { monthStart: 0, yearStart: 0 }, { monthStart: 0, yearStart: 0 }],
order = monthYearObj .reduce((r, o, i) => {
if (!o.monthStart) r[o.monthStart + '|' + o.yearStart] = o;
return r;
}, {}),
result = financeYears.map(({ month, year }) => order[month + '|' + year] || { monthStart: month, yearStart: year });
monthYearObj.sort((a, b) => order[a.yearStart + '|' + a.monthStart] - order[b.yearStart + '|' + b.monthStart]);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- reactjs - 使 Select 上的标签可编辑
- c# - .NET 5.0 无法在 Visual Studio Code 上搭建 razorpage
- sql - sql从一系列位值制作几何序列
- c# - 如何将每个单词字母带入数组c#
- angular - 每次构建时,Electron 应用程序的大小都会增加
- python-3.x - 如何使用python3从URL修改字段
- python - NumPy的sum方法中参数-1是什么意思?
- python - TA-lib 库未安装在 pydroid 3 中?
- python - Selenium / Beautiful Soup 在网页中找不到元素
- cocoa - 如何获得 NSTextField/NSSearchField 的充满活力的效果,如 Big Sur 中 Safari 的地址栏