首页 >web前端 >js教程 >如何在 JavaScript 中按日期属性对对象数组进行排序?

如何在 JavaScript 中按日期属性对对象数组进行排序?

DDD
DDD原创
2024-12-21 08:01:091000浏览

How to Sort an Array of Objects by Date Property in JavaScript?

按日期属性对对象数组进行排序

要按日期属性对对象数组进行排序,可以使用 JavaScript 的 sort() 函数与自定义比较器结合使用。该过程涉及比较日期值并根据其顺序返回负值、正值或零值。

简单答案:

array.sort(function(a, b) {
  return new Date(b.date) - new Date(a.date);
});

此比较器创建一个两个日期的日期对象并减去它们的值。负值表示 a 比 b 更接近当前日期,正值表示 b 更接近,零表示相等。

通用答案:

array.sort(function(o1, o2) {
  if (sort_o1_before_o2) return -1;
  else if (sort_o1_after_o2) return 1;
  else return 0;
});

这种更通用的方法允许通过定义在之前或之后对 o1 进行排序的单独条件来自定义排序顺序o2.

强大的答案:

一个强大的解决方案是在所有数组上使用 Schwartzian 变换来定义自定义的不可枚举 sortBy 函数:

(function() {
  if (typeof Object.defineProperty === 'function') {
    try {
      Object.defineProperty(Array.prototype, 'sortBy', { value: sb });
    } catch (e) {}
  }
  if (!Array.prototype.sortBy) Array.prototype.sortBy = sb;

  function sb(f) {
    for (var i = this.length; i;) {
      var o = this[--i];
      this[i] = [].concat(f.call(o, o, i), o);
    }
    this.sort(function(a, b) {
      for (var i = 0, len = a.length; i < len; ++i) {
        if (a[i] != b[i]) return a[i] < b[i] ? -1 : 1;
      }
      return 0;
    });
    for (var i = this.length; i;) {
      this[--i] = this[i][this[i].length - 1];
    }
    return this;
  }
})();

这可以实现简洁而强大的排序:

array.sortBy(function(o) { return o.date });

您还可以扩展此方法,通过在比较器函数中返回值数组来处理排序过程中的多个条件。

以上是如何在 JavaScript 中按日期属性对对象数组进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn