我遇到了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
它正常工作。
无法理解我错在哪里。
答案 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()))