【问题标题】:How can you compare "week-year" value in JS?您如何比较 JS 中的“周年”值?
【发布时间】:2018-09-20 08:29:59
【问题描述】:

例如,我有以下周年格式的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"

【问题讨论】:

  • 为什么 "8-18"
  • “第 4 周 18 年”早于“第 8 周 18 年”。我想我在这里做错了什么,但是我想有一种方法来比较这个值......
  • "8-18"
  • 年份乘以100再加上星期,就可以直接比较数字了。
  • 为什么你的对象是单个数组?

标签: javascript comparison date-comparison


【解决方案1】:

您可以创建一个格式化的字符串,首先是年份,然后是一个填充的星期,可以将其作为字符串进行比较。

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; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2019-02-19
    • 1970-01-01
    • 2017-06-16
    相关资源
    最近更新 更多