在多维数组javascript中搜索

时间:2015-04-13 09:57:03

标签: javascript jquery jquery-ui datepicker

我遇到了java脚本多维数组的问题。我希望在给定数组中搜索日期和月份(如果存在)。我的意思是我想计算日期,除了星期六星期日国家法定假日我有这个数组

var natDays = [
          [1, 1, 'uk'],
          [1, 19, 'uk'],
          [2, 16, 'uk'],
          [4, 23, 'uk'],
          [7, 03, 'uk'],
          [7, 04, 'uk'],
          [9, 07, 'uk'],
          [8, 12, 'uk'],
          [11, 11, 'uk'],
          [11, 26, 'uk'],
          [12, 25, 'uk']
        ];

参考这个答案Here。我已经创建了这样的函数

function check_hol(month,date)
{
    var natDays = [
          [1, 1, 'uk'],
          [1, 19, 'uk'],
          [2, 16, 'uk'],
          [4, 23, 'uk'],
          [7, 03, 'uk'],
          [7, 04, 'uk'],
          [9, 07, 'uk'],
          [8, 12, 'uk'],
          [11, 11, 'uk'],
          [11, 26, 'uk'],
          [12, 25, 'uk']
        ];
    for( var md = 0; md <= natDays.length; md++ ) 
            {

                alert(natDays[md][0]+'='+month+' and '+natDays[md][1]+'='+date) ;
                if( natDays[md][0] != month && natDays[md][1] != date ) 
                {
                        return true;

                }
            }
            return false;

}

我正在使用此功能计算此功能的工作日

function workingDays(){
    var n=0;

    for(var i=1; i<=dp.datediff; i++){
        var d1 = new Date();
        d1.setDate(d1.getDate()+i);
        if(d1.getDay() !== 0&&d1.getDay()!==6 && check_hol(d1.getMonth()+1,d1.getDate())===true)
        {

            n++;
        }       

    }
    alert(n);
    dp.wdiff = n;
    getShipDays();
    getProdDays();
    getQuantity();
    getShipProdDays();
}

但它在工作日的输出中返回0。如果我从我的第二个函数中删除&& check_hol(d1.getMonth()+1,d1.getDate())===true它正常工作。

无法理解我错在哪里。

1 个答案:

答案 0 :(得分:0)

代替!=代码应该使用==,因为您希望在找到值时进行匹配。如果您这样做,它将在整个数组中搜索该值。

<=中的for应该是<,因为您的索引从0开始。

for (var md = 0; md < natDays.length; md++) { // changed in md < natDays
   if (natDays[md][0] == month && natDays[md][1] == date) { // if values are == that means the value is found
       return true; // isHoliday
   }
}

function check_hol(month, date) {
  var natDays = [
    [1, 1, 'uk'],
    [1, 19, 'uk'],
    [2, 16, 'uk'],
    [4, 23, 'uk'],
    [7, 03, 'uk'],
    [7, 04, 'uk'],
    [9, 07, 'uk'],
    [8, 12, 'uk'],
    [11, 11, 'uk'],
    [11, 26, 'uk'],
    [12, 25, 'uk']
  ];
  
  for (var md = 0; md < natDays.length; md++) { // changed in md < natDays
    if (natDays[md][0] == month && natDays[md][1] == date) { // if values are == that means the value is found
      return true; // isHoliday
    }
  }
  return false; // !isHoliday => isWorkingDay
}

alert("found: " + check_hol(11,11));
alert("found: " + check_hol(11,12));

您需要在工作日内进行一些更改,因为如果找到值(true),则表示假期

 if(d1.getDay() !== 0&&d1.getDay()!==6 && !check_hol(d1.getMonth()+1,d1.getDate()))