2014-05-14 43 views
1

我想過濾使用日期但數據是JSON格式。如何在JavaScript中使用日期過濾大數據集?如何使用日期從JSON格式過濾數據

例子:

data=[{date:'22-12-2014',name:'selva'},{date:'10-10-2010',name:'raja'},{date:'11-11- 2011',name:'suresh'}] 
+0

會是什麼過濾器呢? – Hatsjoem

+0

你想按特定日期提取對象,或按日期分組(排序)所有對象嗎? – Andy

+0

順便說一句,該數據不是JSON(它不會解析)。這是一個JS對象。 – Andy

回答

2

如果你只是想通過時間來過濾數據,您可以通過所有物品看上去數組像這樣:

var filteredData = []; 

for(var index in data) { 
    var obj = data[index]; 
    var date = parseDate(obj.date); 

    //Filter dates from 2011 and newer 
    if(date > new Date(2011, 0, 1)) 
     filteredData.push(obj); 
} 

function parseDate(dateStr) { 
    var date = dateStr.split('-'); 
    var day = date[0]; 
    var month = date[1] - 1; //January = 0 
    var year = date[2]; 
    return new Date(year, month, day); 
} 

//Filtered data now contains: 
// [{"date":"22-12-2014","name":"selva"},{"date":"11-11- 2011","name":"suresh"}] 

我相信你能做到解析日期更好,例如通過Date構造函數接受的格式定義日期。

+0

'var date = new Date(data [i] ['date']。split(' - ')。reverse());'解析日期格式就好了;) – www0z0k

3

要獲取匹配某個日期的元素集合,可以使用filter將它們提取到新數組中。

function getByDate(date){ 
    return data.filter(function (el) { 
    return el.date == date; 
    }); 
} 

var arr = getByDate('11-11-2011'); 

要按日期對數據集進行排序,您需要先將日期字符串轉換爲JS日期對象。這涉及到稍微調整日期字符串,以便可以正確解析。

function reformatDate(date) { 
    return arr = date.split('-').reverse(); 
} 

var sortByDate = function (a, b) { 
    return new Date(reformatDate(a.date)) - new Date(reformatDate(b.date)); 
}; 

data.sort(sortByDate); 

JSFiddle demo

1

來獲取一系列符合您可以使用過濾器將它們提取到一個新的數組某一特定日期的元素的。

var tempArray= data.filter(function (d, i) { 
    return d >= startDate && d <= endDate; 
}) 
0

我用日期格式MM/DD/YY。下面是完整的例子 -

var data=[ 
 
    {date:'02/10/2018',name:'date is 10'}, 
 
    {date:'02/14/2018',name:'date is 14'}, 
 
    {date:'02/16/2018',name:'date is 16'}, 
 
    {date:'02/20/2018',name:'date is 20'}, 
 
    {date:'02/24/2018',name:'date is 24'}, 
 
    {date:'02/26/2018',name:'date is 26'}, 
 
    {date:'02/30/2018',name:'date is 30'}, 
 
    {date:'03/01/2018',name:'date is 01'}, 
 
    {date:'03/05/2018',name:'date is 05'}, 
 
    {date:'02/23/2018',name:'date is name 23'}, 
 
] 
 

 

 

 

 
    var today   = new Date(); 
 
    var todayTime  = new Date().getTime(); 
 
    var days_after_20 = new Date().setDate(today.getDate()+20); 
 
    var days_before_5 = new Date().setDate(today.getDate()-5); 
 

 
    var result = data.filter(function (item) { 
 
    var itemTime = new Date(item.date).getTime() 
 
    return itemTime >= days_before_5 && itemTime <= days_after_20; 
 
    }) 
 

 
console.log(result);