[英]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.