Добавить параметр в массив и оценить каждый элемент массива

У меня есть сценарий, в котором я помещаю каждое значение параметра (Дата) в массив и оцениваю каждый элемент.

   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.

Этот сценарий оценивается как false, если я установил itineraryParamDate как 30112018 //ddmmyyyy. Он должен оцениваться как true.

Я сомневаюсь, что -> var travelDate = i.toString(); не оценивает правильное значение. Может кто-нибудь посоветует мне по этому поводу?

Пожалуйста, уменьшите вашу проблему до работоспособного примера без зависимости от внешнего состояния и укажите ожидаемый результат.

Jonas Høgh 26.10.2018 09:11
1
1
61
1

Ответы 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, потому что «истина» и «ложь» - непустые строки, и поэтому каждая из них оценивается как истинная. Если кто-то хочет вернуть значение, он должен использовать функцию, которая в данном случае называется Test (). Кроме того, внутреннее условное выражение if должно использовать логическое ИЛИ вместо логического И. Когда daysDiff имеет значение 34, как это произошло 26 октября с этим кодом, тогда условное выражение if имеет смысл только при использовании логического ИЛИ. Наконец, нет необходимости повторно объявлять переменные в цикле for. Лучше определять значения вне цикла и устанавливать значения по умолчанию. В цикле for вы можете переназначить значения этим переменным.

Привет @ Slevy1, Вышеупомянутый скрипт работает нормально. Спасибо. Однако, если я добавляю новое значение в strDepDate, это значение не добавляется в массив travelDateArr. Я хочу добавить каждое новое значение strDepDate в массив travelDateArr

Ambika Tewari 30.10.2018 08:26

@AmbikaTewari Мне нужно было бы увидеть код, который вы используете для добавления нового значения в strDepDate. Как strDepDate получает новые значения?

slevy1 30.10.2018 08:42

@AmbikaTewari Итак, как добавить новое в strDepDate? И что это была за ценность? Если strDepDate будет многократно переназначать новые значения, вам, вероятно, потребуется изменить код, создав какой-то цикл. Кроме того, откуда берутся эти ценности?

slevy1 30.10.2018 20:35

Другие вопросы по теме