📜  按日期排序 js 数组 - Javascript (1)

📅  最后修改于: 2023-12-03 15:39:48.736000             🧑  作者: Mango

按日期排序 JS 数组

在 JavaScript 中,我们可以通过 sort() 方法对数组进行排序,但是默认情况下排序方式是按照字符串的 Unicode 码值进行比较的 ,这在对日期进行排序时是不可取的。因此我们需要使用自定义的比较函数。

自定义比较函数

自定义比较函数是一个接受两个参数的函数,返回一个数字。这个数字表示第一个参数在排序后应该排在第二个参数的前面(返回负数),后面(返回正数),或与第二个参数相等(返回0)。因此,我们可以根据日期的大小关系来返回相应的数字。

function compare(a, b) {
  const dateA = new Date(a.date);
  const dateB = new Date(b.date);

  if (dateA < dateB) {
    return -1;
  }

  if (dateA > dateB) {
    return 1;
  }

  return 0;
}

这里我们定义了一个 compare() 函数,接受两个参数 ab,分别表示待排序的两个数组元素。我们首先将它们转换为 Date 对象,然后进行比较。如果 dateA 小于 dateB,则返回 -1;如果 dateA 大于 dateB,则返回 1;否则返回 0,表示它们相等。

对数组进行排序

有了自定义的比较函数,我们就可以对数组进行排序了。我们可以调用数组的 sort() 方法,将自定义的比较函数作为参数传入:

const dates = [
  { date: "2022-02-05" },
  { date: "2022-02-01" },
  { date: "2022-02-10" },
  { date: "2022-02-03" },
  { date: "2022-02-07" }
];

dates.sort(compare);

此时 dates 数组已经按照日期的大小关系进行了排序。我们可以使用 console.log() 方法来查看每个元素的日期:

dates.forEach((item) => console.log(item.date));

输出结果为:

2022-02-01
2022-02-03
2022-02-05
2022-02-07
2022-02-10
其他注意事项
  • 如果数组中的元素不是对象,而是字符串等其他类型,我们可以在比较函数中将它们转换为 Date 再进行比较。
  • 如果数组中的元素本身就是 Date 类型,我们可以直接在比较函数中进行比较。