【问题标题】:Write sorting for date and name in JavaScript?在 JavaScript 中为日期和名称编写排序?
【发布时间】:2019-09-20 15:12:28
【问题描述】:

中的日期和姓名如何排序?我有一张桌子。有2列:namecreated date

name:  ["A", "A9", "A10", "A11", "A3"]
createdDate: ["Apr 2, 2019 3:07 PM", "Apr 10, 2019 9:25 AM", "Apr 30, 2019 6:08 PM", "Apr 10, 2019 8:25 AM", "Apr 2, 2019 8:07 PM"]

我已经尝试使用排序方法。输出应该是这样的:

name: ["A", "A3", "A9", "A10", "A11"]
createdDate: ["Apr 2, 2019 3:07 PM", "Apr 2, 2019 8:07 PM","Apr 10, 2019 8:25 AM", "Apr 10, 2019 9:25 AM", "Apr 30, 2019 6:08 PM"]

【问题讨论】:

  • 实际上它不适用于字母数字字符。我已经尝试过以下代码:- .sort(a,b){ var firstEl = (a === undefined) ?一个:a.toUpperCase(); var secondEl = (b === 未定义) ? b: b.toUpperCase(); if(firstEl === undefined || firstEl === "") {return (1)} if(secondEl === undefined || secondEl === "") {return (-1)} if(firstEl == = secondEl) {return 0;} return firstEl
  • name 的排序是否会影响createdDate,反之亦然?
  • 是的,应该是

标签: javascript javascript columnsorting tablesort


【解决方案1】:

这是您可以使用 localeCompare() 以字母数字方式对 name 数组进行排序的方法,并将数字作为选项之一传递。

const name =  ["A", "A9", "A10", "A11", "A3"];
name.sort((a, b) => a.localeCompare(b, 'en', { numeric: true }));
console.log(name);

您可以通过以下方式按日期对它们进行排序。本质上,我们在进行比较时将它们转换为 JavaScript 日期对象。

const createdDate = ["Apr 2, 2019 3:07 PM", "Apr 2, 2019 8:07 PM","Apr 10, 2019 8:25 AM", "Apr 10, 2019 9:25 AM", "Apr 30, 2019 6:08 PM"];
createdDate.sort((a, b) => new Date(a) - new Date(b));
console.log(createdDate);

【讨论】:

  • 但我确实有字符串和字母数字字符的组合,但它不起作用
  • 只是为了检查一下,您是否使用您指定的名称数组尝试了上述方法? ["A", "A9", "A10", "A11", "A3"]?因为当我在本地测试时,它给了我这个["A", "A3", "A9", "A10", "A11"],这实际上是正确的吗?
  • 是的!已经尝试过,但我有新的测试用例,如名称包含:- 名称:[“a”,“a10”,“a11”,“A9”,“Atlas”,“btlas”] 这种情况下它不起作用
  • 现在我已经为字母数字字符添加了条件,但我有一个疑问是上述方法总是适用于日期?
  • @kashifazmi 我已经更新了我的答案以检查日期的排序。试试看? :)
【解决方案2】:

对字符串进行排序:

array.sort(function(a, b) {
    var titleA = a.title.toLowerCase(), titleB = b.title.toLowerCase();
    if (titleA < titleB) return -1;
    if (titleA > titleB) return 1;
    return 0;
});

对日期进行排序:

array.sort(function(a, b) {
    var dateA = new Date(a.release), dateB = new Date(b.release);
    return dateA - dateB;
});

有关详细信息,请参阅此文档https://en.proft.me/2015/11/14/sorting-array-objects-number-string-date-javascrip/

【讨论】:

    【解决方案3】:

    要正确地做到这一点,我会结合sudipwentjun的答案

    字符串:

    name.sort((a, b) => a.localeCompare(b, 'en', { numeric: true }));
    

    日期:

    createdDate.sort((a, b) => Date.parse(a) - Date.parse(b));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      相关资源
      最近更新 更多