首頁 >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