2013-05-25 64 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 

这是因为通用的,因为它得到:)