将参数附加到数组并评估每个数组元素

时间:2018-10-26 07:01:07

标签: javascript

我有一个脚本,其中我将每个参数值(日期)推入数组并评估每个元素。

   if(frame.name == 'bookingConfirmedMbox')
{
            var checkinEligible= "false";

            var currDate = Date.parse(new Date());

            var depDate = frame.param(itineraryParamDate);

            var departureDate = depDate.toString();
            var travelDateArr = new Array();

            travelDateArr.push(depDate);

            console.log(travelDateArr);
            var travelDateArrlen = travelDateArr.length;

                for (var i=0 ; i< travelDateArrlen ; i++)
                    {
                        var travelDate = travelDateArr[i].toString();
                        var depaDate = travelDate.replace(/(\d{2})(\d{2})(\d{4})/, "$2/$1/$3");
                        var dDate= Date.parse(new Date(depaDate));
                        var timeDiff = parseInt(dDate - currDate);
                        var daysDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24));
                    }

            if (daysDiff >= 2 && daysDiff  <=7 )
            {
            checkinEligible="true";
            }       
            else
            {
            checkinEligible="false";
            }

return checkinEligible;
}

此处,itineraryParamDate是框架的参数名称,并且通过frame.param('itineraryParamDate')的值被存储并附加在array中。

如果我将itineraryParamDate设置为30112018 // ddmmyyyy,则此脚本的评估结果为false。

我的疑问是-> var travelDate = i.toString();未评估正确的值。 有人可以建议我吗?

1 个答案:

答案 0 :(得分:1)

function Test() {
  // 
  var frame = new Object;
  frame.name = 'bookingConfirmedMbox';

  var checkinEligible = false;
  var currDate = null;
  var strDepDate = "";
  var travelDateArr = [];
  var travelDateArrlen = 0;
  var travelDate = "";
  var dDate = "";
  var timeDiff = 0;
  var daysDiff = 0;

  if (frame.name == 'bookingConfirmedMbox') {
    currDate = Date.parse(new Date());

    strDepDate = "30112018";

    travelDateArr.push(strDepDate);

    travelDateArrlen = travelDateArr.length;

    for (let i = 0; i < travelDateArrlen; i++) {
      travelDate = strDepDate.toString();

      strDepDate = travelDate.replace(/(\d{2})(\d{2})(\d{4})/, "$2/$1/$3");



      dDate = Date.parse(new Date(strDepDate));

      timeDiff = parseInt(dDate - currDate);

      daysDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24));
    }
    if (daysDiff >= 2 || daysDiff <= 7) {

      checkinEligible = true;
    } else {
      checkinEligible = false;
    }

  }
  return checkinEligible;
} // end Test();

var retval = Test();
var res = (retval) ? "Test worked" : "Test failed";
console.log(res);

OP在代码示例中存在许多问题。如果希望得到一个对或错的结果,则应该使用布尔值true和false,因为“ true”和“ false”是非空字符串,因此每个值都为true。如果希望返回一个值,则必须使用一个函数(在这种情况下称为Test())。同样,内部if条件需要使用逻辑或而不是逻辑与。当daysDiff的值保持为34(如10月26日使用此代码发生的情况)时,则if条件只有在使用逻辑OR时才有意义。最后,无需在for循环中重新声明变量。最好在循环外定义值并设置为默认值。在for循环中,您可以将值重新分配给那些变量。