2013-07-10 56 views
0

我试图找到匹配日期被发现的嵌套数组的“标题”......但无济于事。如何找到找到值的多维数组的“标题”?

如果在数组中找到日期,它应该提示“TRUE”。日期必须匹配或在日期范围内。当它被发现时,我想获得嵌套数组的“标题”,它被发现匹配。 (IE。日期“2013年10月29日”被发现匹配下“人2”。我想说的标题以及。

我目前循环两个嵌套数组检查最后,他们会有更多的人和时间,要注意的是,没有时间在数组中出现两次,这将用于在网页上显示谁在那段时间内可用,而数据库会是一个更好的路线走,这是坐在主机和不会被捆绑到DB2。

如果要去关于一个更简单的方法,我所有的耳朵也是如此。

var data = [] 
var data = [ 
    {title:'Person 1',contents:[ 
     {primary:"7/09/2013"},{primary:"7/22/2013"},{primary:"10/15/2013"},{primary:"10/28/2013"},{primary:"1/21/2014"},{primary:"2/03/2014"}]}, 
    {title:'Person 2',contents:[ 
     {primary:"7/23/2013"},{primary:"8/05/2013"},{primary:"10/29/2013"},{primary:"11/11/2013"},{primary:"2/04/2014"},{primary:"2/17/2014"}] 
    } 
]; 

Array.prototype.between = function(arg) { 
for(var i=0, j=data.length; i < j; i++){ 
    for(var p=0, plen=data[i].contents.length; p < plen; p++){ 
     var d1 = new Date(data[i].contents[0].primary), 
      d2 = new Date(data[i].contents[1].primary), 
      d4 = new Date(data[i].contents[2].primary), 
      d5 = new Date(data[i].contents[3].primary), 
      d3 = new Date(arg); 
     } 
     //alert(data[i].title); //Using "data[i].title" will grab both titles but I only need one. 
    } 
return ((d1.getTime() <= d3.getTime() && d3.getTime() <= d2.getTime()) || (d4.getTime() <= d3.getTime() && d3.getTime() <= d5.getTime())); 
} 

alert(data.between("10/29/2013")); 

和提琴......

http://jsfiddle.net/sherman2k2/E3ASy/1/

+0

如果您将日期设置为数组而不是重复键对象,那么编写逻辑会更简单。 – dandavis

+0

你的代码对我没有意义。每次通过内部循环时,都会重置所有这些“d”变量的值。在该函数结束时,这些值将是来自循环的最后一次迭代的值。 – Pointy

回答

1

我敢肯定,你的代码应该是这个样子:

Array.prototype.between = function(arg) { 
    for(var i=0, j=data.length; i < j; i++){ 
     for(var p=0, plen=data[i].contents.length; p < plen; p++){ 
      var d1 = new Date(data[i].contents[0].primary), 
       d2 = new Date(data[i].contents[1].primary), 
       d4 = new Date(data[i].contents[2].primary), 
       d5 = new Date(data[i].contents[3].primary), 
       d3 = new Date(arg); 
      if ((d1.getTime() <= d3.getTime() && d3.getTime() <= d2.getTime()) || (d4.getTime() <= d3.getTime() && d3.getTime() <= d5.getTime())) 
       return data[i].title; 
     } 
    } 
} 

当你调用该函数,它会返回要么称号或者如果日期不匹配undefined

+0

这就是我一直在寻找的东西。我确定我的代码并不是最好的格式,但我一直在使用它的几个版本,并且在代码中开始有点丢失。这有助于让我回到路上。 –