2013-05-25 66 views
1

鑑於以下json,我如何過濾它以提取並返回相關對象,其中該對象的會話匹配當前時間「now」到接下來的3個小時? (意思是說,如果我現在的時間是23 May 2013 9 am,則會返回對象1,2,3,4和6)。過濾器json匹配時間表

會使用類似JSONPath的庫嗎 - http://goessner.net/articles/JsonPath/ - 工作效率更高?

var schedule_list = [ 
     { 
      id: 1, 
      name: 'John', 
      sessions: [ 
       { 
        id: 1, 
        date: "23-May-2013", 
        start: "1000", 
        end: "11000" 
       }, 
       { 
        id: 2, 
        date: "23-May-2013", 
        start: "1300", 
        end: "1500" 
       } 
      ] 
     }, 
     { 
      id: 2, 
      name: 'Mary', 
      sessions: [ 
       { 
        id: 1, 
        date: "23-May-2013", 
        start: "1000", 
        end: "11000" 
       }, 
       { 
        id: 2, 
        date: "23-May-2013", 
        start: "1300", 
        end: "1500" 
       } 
      ] 
     }, 
     { 
      id: 3, 
      name: 'Peter', 
      sessions: [ 
       { 
        id: 1, 
        date: "23-May-2013", 
        start: "1000", 
        end: "11000" 
       }, 
       { 
        id: 2, 
        date: "23-May-2013", 
        start: "1300", 
        end: "1500" 
       } 
      ] 
     }, 
     { 
      id: 4, 
      name: 'Joe', 
      sessions: [ 
       { 
        id: 1, 
        date: "23-May-2013", 
        start: "1000", 
        end: "11000" 
       }, 
       { 
        id: 2, 
        date: "23-May-2013", 
        start: "1300", 
        end: "1500" 
       } 
      ] 
     }, 
     { 
      id: 5, 
      name: 'Max', 
      sessions: [ 
       { 
        id: 1, 
        date: "23-May-2013", 
        start: "1600", 
        end: "1700" 
       } 
      ] 
     }, 
     { 
      id: 6, 
      name: 'Tom', 
      sessions: [ 
       { 
        id: 1, 
        date: "23-May-2013", 
        start: "1200", 
        end: "1300" 
       } 
      ] 
     } 
    ]; 

我正在尋找日期對象比較的通用解決方案。不只是一個基於字符串的比較。基本上,我的「當前時間」可以由用戶更改,服務器返回的日期,開始日期和結束日期(以我的JSON格式)都可以是可變的。

回答

0

看看這個:

http://jsfiddle.net/xCsK3/2/

基本上,有什麼做的工作是這樣的代碼:

//get the current time and replace whitespaces with '-' 
var currentTime = "23-May-2013-9-am"; 
for(var x = 0; x <schedule_list.length; x++){ 
    for(var y = 0; y < schedule_list[x].sessions.length; y++){ 
     //check if current sessions obj time, is substring of current time 
     if(currentTime.indexOf(schedule_list[x].sessions[y].date) > -1) 
      console.log("x = "+x+", y = "+y+", date = "+schedule_list[x].sessions[y].date); 
    } 
} 

希望它有助於

+0

我要尋找一個**通用的解決方案爲** DateTime對象比較。不只是比較日期字符串。 –

0

您可以使用DefiantJS(http://defiantjs.com)它使用搜索方法擴展了全局對象JSON。使用此方法,您可以使用XPath表達式查詢JSON結構(XPath是標準化的查詢語言,而JSONPath不是)。

搜索方法返回數組中的匹配(如果未找到匹配,則返回空數組)。 這是下面代碼的jsfiddle;
http://jsfiddle.net/hbi99/6KLMv/

var data = [ ... ], 
    res = JSON.search(data, //sessions[date="23-May-2013" and start>="0900" and start<="1200"]/..); 

for (var i=0; i<res.length; i++) { 
    console.log(res[i].id); 
} 
// 1 
// 2 
// 3 
// 4 
// 6 

這是因爲通用的,因爲它得到:)