【问题标题】:Sorting Date mm/dd/yyyy field from an array of arrays从数组数组中对日期 mm/dd/yyyy 字段进行排序
【发布时间】:2018-10-31 07:45:44
【问题描述】:

我目前正在从 API 获取数据,但在尝试按日期对客户端视图中的数据进行排序时遇到问题。

这是我收到的数据(大约 20 多个,但我举了一个示例,其中填写了一些示例数据)

address: "1212 Test Ave"
address2: ""
checkNumber : ""
city: "La Grange"
country: ""
email: "test-email@yahoo.com"
firstName: "John"
id: "103138"
lastName: "Dough"
middleName: ""
organization: ""
partnerId: "108765.1"
paymentAmount: "$5.00 "
paymentDate: "7/30/2015"
paymentType: "CASH"
phoneNumber: "(999)999-9999"
spouseFirstName: ""
spouseLastName: ""
spouseTitle: ""
state: "IL"
title: "Mr. & Mrs."
zipCode: "60525-2544"

在一个名为“contributions”的数组中有 20 多个。 如何按 paymentDate "mm/dd/yyyy" 对这个数组进行排序。显然它会先排序年份,然后是月份,然后是日期。

我已经看到代码在某种程度上做到了这一点,但我在从一个不仅仅是日期数组的数组中实现它时遇到了麻烦。

它也不能正确地对日期进行排序,只是月/年。年份是一个单独的数组,我出于不同的目的提取了所有日期。

this.years.sort(function (a, b) { return a - b });

但我正在尝试按日期对第一个代码块中列出的整个数组进行排序。

如果有人可以帮助我或指引我正确的方向,那将是一个巨大的帮助!

谢谢!

使用@mplungjan 方法的附加信息。这是发送到表时的全部输出。

【问题讨论】:

  • contributions.sort(function (a, b) { return new Date(a.paymentDate).getDate() - new Date(b.paymentDate).getDate(); });
  • 似乎这只是按天排序,而不是按年、月、日排序。但是,它确实帮助我理解了日期特定部分的排序部分是如何工作的。 getDate 只抓取当天,这就是为什么它只按天排序。
  • 假设您的日期是可解析的,这是极不可能的。
  • 我用它的样子编辑了我的帖子。
  • 我的错误:你需要 .getTime() 而不是 getDate()

标签: javascript arrays angular typescript sorting


【解决方案1】:

这是一个易于理解的解决方案:

for (var i = 0; i < contributions.length; i++) {
    var dateI = new Date(contributions[i].paymentDate);
    for (var j = i + 1; j < contributions.length; j++) {
        var dateJ = new Date(contributions[j].paymentDate);
        if (dateI > dateJ) {
            var aux = contributions[i];
            contributions[i] = contributions[j];
            contributions[j] = aux;
            dateI = dateJ;
        }
    }
}

如果你想要一个已经存在的解决方案,那么:

contributions.sort(function(a, b) {
    return new Date(a.paymentDate) - new Date(b.paymentDate);
});

【讨论】:

  • 谢谢,您的回答非常有用。我可以看到它现在是如何工作的,但是从上面有人给出的答案来看,似乎带有 getDate 的方法只对当前日期进行排序。而你的给我一个错误(左手和右手算术运算必须是'any'类型。我需要它按年、月、日排序。
  • @AlexLiosatos 我的回答中有一些错别字。我已经编辑了我的答案。这个对我有用。你能给我一个我的代码无法排序的贡献的示例数据吗?您能否指定第一种或第二种方法是否失败?如果有问题,我们会修复它。但我需要一些信息才能做到这一点。
【解决方案2】:

排序需要date.getTime()-date.getTime()

在这种情况下,您可以不使用 getTime,因为无论如何都会使用它

var contributions = [
  {paymentDate: "9/2/2014"},
  {paymentDate: "9/7/2014"},
  {paymentDate: "10/8/2015"},
  {paymentDate: "1/9/2014"},
  {paymentDate: "3/9/2015"}
]
contributions.sort(function(a, b) {
  return new Date(a.paymentDate) - new Date(b.paymentDate)
})
console.log(contributions)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多