【问题标题】:Sort json by date when date is not in valid format当日期格式无效时按日期对 json 进行排序
【发布时间】:2015-08-29 18:09:03
【问题描述】:

我有这个 json:

    module.exports = [
         {
           "date": "01-2012"
         },
         {
           "date": "12-2011"
         },
         {
           "date": "01-2014"
         },
         {
           "date": "08-2015"
         }
    ];

我想按日期排序,但问题是它不是有效的格式(MM-YYYY),这可能吗?有人可以帮我看看吗?

谢谢。

【问题讨论】:

  • 你想在哪里排序?在后端?你能更好地解释你在做什么,也许会显示更多你的代码?
  • 是的,我正在尝试使用 javascript (node.js) 在后端导出。

标签: javascript json node.js date


【解决方案1】:

是的,这是可能的!要对该数组进行排序,您可以使用数组的 sort 方法,将要用于排序的回调传递给它。

在您的示例中,您可以执行以下操作:

function parseMyDate( date_value ) {
    return new Date( date_value.replace(/([0-9]{1,2})\-([0-9]{4})/, "$2-$1-01") );
}

module.exports.sort(function(a, b) {
    return parseMyDate( a.date ) - parseMyDate( b.date );
});

这里有一个运行示例https://jsfiddle.net/un79c12m/,包括解决方案。

希望对你有帮助。

【讨论】:

  • rdgfuentes,非常感谢,但是.. 如果我要求不高,你能解释一下正则表达式吗?我了解捕获组,但我想了解 $2-$1-01 是什么。
  • 当然! $2 包含在您的案例 YYYY 中第二个括号中捕获的内容。另一方面, $1 包含第一个括号中的正则表达式捕获的内容,在您的情况下是 MM 。然后我为日部分添加 01,这样我就可以使用 ISO 格式的字符串日期来创建日期的实例。例如:“12-2011”将转换为“2011-12-01”以创建日期对象,即:new Date( '2011-12-01')。有意义吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 2020-09-08
  • 2020-10-30
  • 2021-05-08
相关资源
最近更新 更多