簡體   English   中英

如何使用JavaScript根據日期鍵對對象數組進行排序?

[英]How to sort array of object based on key that is date using javascript?

我在JavaScript中有以下數組(日期以mm-dd-yyyy格式)。

[ 
  {'12-11-2018': 'NA' },
  { '12-05-2018': 'NA' },
  { '12-09-2018': 'pass' },
  { '12-07-2018': 'pass' },
  { '12-10-2018': 'pass' },
  { '12-08-2018': 'pass' },
  { '12-06-2018': 'pass' } 
]

我想按日期升序對它進行排序。

預期產量

[ 
  { '12-05-2018': 'NA' },
  { '12-06-2018': 'pass' },
  { '12-07-2018': 'pass' },
  { '12-08-2018': 'pass' },
  { '12-09-2018': 'pass' },
  { '12-10-2018': 'pass' },
  { '12-11-2018': 'NA' } 
]

您可以獲取每個對象的第一個鍵,將其轉換為日期,然后通過比較以下日期進行排序:

 const data = [{ '12-11-2018': 'NA' }, { '12-05-2018': 'NA' }, { '12-09-2018': 'pass' }, { '12-07-2018': 'pass' }, { '12-10-2018': 'pass' }, { '12-08-2018': 'pass' }, { '12-06-2018': 'pass' } ] const getDate = str => { const parts = str.split('-') return new Date(parts[0], parts[1] - 1, parts[2]) } const getFirstKey = obj => Object.keys(obj)[0] const fullConversion = dateStr => getDate(getFirstKey(dateStr)) const sorter = (a, b) => fullConversion(a) < fullConversion(b) ? -1 : 1 const result = data.sort(sorter) console.dir(result) 

假設日期采用MM-DD-YYYY格式,則可以通過將其重新格式化為ISO 8601並使用localeCompare對其進行排序來對它們進行排序。 這樣可以避免內置的日期解析器和相關問題,例如

 var data = [ {'12-11-2018': 'NA' }, { '12-05-2018': 'NA' }, { '12-09-2018': 'pass' }, { '12-07-2018': 'pass' }, { '12-10-2018': 'pass' }, { '12-08-2018': 'pass' }, { '12-06-2018': 'pass' } ]; let mix = d => d.replace(/(\\d+)-(\\d+)-(\\d+)/,'$3$1$2'); let key = Object.keys; data.sort((a, b) => mix(key(a)[0]).localeCompare(mix(key(b)[0]))); console.log(JSON.stringify(data).replace(/,/g,',\\n ')); 

您需要使用Array.sort()對數組進行排序。 因此使用它,並在函數中使用Object.keys()獲取對象(日期)的鍵,並將其轉換為日期對象,然后進行比較。

var res = arr.sort((a,b) => new Date(Object.keys(a)[0]) - new Date(Object.keys(b)[0]));

 var arr = [ {'12-11-2018': 'NA' }, { '12-05-2018': 'NA' }, { '12-09-2018': 'pass' }, { '12-07-2018': 'pass' }, { '12-10-2018': 'pass' }, { '12-08-2018': 'pass' }, { '12-06-2018': 'pass' } ]; var res = arr.sort((a,b) => new Date(Object.keys(a)[0]) - new Date(Object.keys(b)[0])); console.log(res); 


更新:

date格式不是javascript有效的date格式 ,因此該代碼可能無法在某些瀏覽器中運行。 您可以將日期轉換為javascript有效格式,以防止出現這種情況。

let validDate = obj => {
  let arr = Object.keys(obj)[0].split('-');
  return new Date([arr[2], arr[0], arr[1]].join('-'));
};
let res = arr.sort((a,b) => validDate(a) - validDate(b));

 let arr = [ {'12-11-2018': 'NA' }, { '12-05-2018': 'NA' }, { '12-09-2018': 'pass' }, { '12-07-2018': 'pass' }, { '12-10-2018': 'pass' }, { '12-08-2018': 'pass' }, { '12-06-2018': 'pass' } ]; let validDate = obj => { let arr = Object.keys(obj)[0].split('-'); return new Date([arr[2], arr[0], arr[1]].join('-')); }; let res = arr.sort((a,b) => validDate(a) - validDate(b)); console.log(res); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM