javascript - 您如何比较 JS 中的“周年”值?
问题描述
例如,我有以下String
周年格式的值:
// week-year
"8-18" < "9-18" // returns true
"8-18" < "10-18" // returns false but should return true
"8-18" < "4-18" // returns false but should be true
为了调度目的,我必须整理出具有“周年”值的数组数组。目前我正在使用array.sort
来完成这个:
var results = [
[
{ weekyear:"4-18" }
],
[
{ weekyear:"5-18" }
],
[
{ weekyear: "1-19" }
] ... ]
results.sort((function (index) { // Sort based on Week-Year in descending order
return function (a, b) {
return (a[index].weekyear === b[index].weekyear ? 0 : (a[index].weekyear< b[index].weekyear ? -1 : 1));
};
})(0));
有什么办法可以将week-year
值修改为允许排序的数值?
上面的排序应该按顺序给我:
"1-19" , "5-18" , "4-18"
解决方案
您可以创建一个格式化的字符串,其中年份首先出现,然后是填充的一周,可以将其作为字符串进行比较。
function getYearWeek(weekYear) {
return weekYear
.split('-')
.map(s => s.padStart(2, '0'))
.reverse()
.join('-W');
}
var results = [{ weekyear: "4-20" }, { weekyear: "5-18" }, { weekyear: "4-18" }, { weekyear: "1-19" }];
console.log(getYearWeek("8-18") < getYearWeek("9-18")); // true
console.log(getYearWeek("8-18") < getYearWeek("10-18")); // true
console.log(getYearWeek("8-18") < getYearWeek("4-18")); // false
results.sort((a, b) =>
getYearWeek(a.weekyear).localeCompare(getYearWeek(b.weekyear)));
console.log(results);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- typescript - Typescript - 按字符串索引查找枚举
- algorithm - 以最小成本将 N 个代理放入 M 个避难所的算法
- javascript - Mongoose 删除数组中的子文档
- c++ - C++ - QProcess 停留在 waitForFinished() 因为 JVM 捕获 SIGCHLD(?)
- python - 狮身人面像导入模块错误 - 方法未定义
- sql - 在 oracle 中获取“当前日期”和接下来 5 天(未来日期)之间的记录
- sql - 在sql中使用case语句获取多行作为输出
- c++ - 为什么 std cin 仅在与 int 变量一起使用时才起作用?
- asp.net-core - 依赖注入 Quartz.Net 调度器
- javascript - fullpagejs 使用 responsiveWidth 自动适应移动设备中的内容