Почему эта функция onclick в Angular 6 не работает должным образом?

Итак, я создал быстрое приложение Angular 6, чтобы помочь оценить суммы счетов с учетом даты начала и окончания периода, для которого пользователь хочет рассчитать. (например, 1 и 5 вернут общую сумму счетов с 1-го по 5-й).

В любом случае, у меня есть кнопка, запускающая следующую функцию при нажатии (this.bills$ — это данные json, которые я использую), но она не работает, когда я ввожу startDay выше, чем endDay.

  estimateBills() {
    this.estimateText = 0;


    console.log('00: startDay is: ' + this.startDay + ' and, endDay is: ' + this.endDay);


    if (this.startDay < this.endDay) {
      console.log('1: startDay is: ' + this.startDay + ' and, endDay is: ' + this.endDay);
      for (var i = 0; i < this.bills$.length; i++) {
        if (this.startDay <= this.bills$[i].DueDate && this.endDay >= this.bills$[i].DueDate) {
          console.log('Bill DueDate is: ' + this.bills$[i].DueDate + ' and Amount is ' + this.bills$[i].Amount);
          this.estimateText = +this.estimateText + this.bills$[i].Amount;
        }
      }
    }
    else if (this.startDay > this.endDay) {
      console.log('2: startDay is: ' + this.startDay + ' and, endDay is: ' + this.endDay);
      for (var i = 0; i < this.bills$.length; i++) {
        console.log('looping');
        if (this.startDay <= this.bills$[i].DueDate || this.endDay >= this.bills$[i].DueDate) {
          console.log('Bill DueDate is: ' + this.bills$[i].DueDate + ' and Amount is ' + this.bills$[i].Amount);
          this.estimateText = +this.estimateText + this.bills$[i].Amount;
        }
      }
    }
    else {
      this.estimateText = 1;
    }


  }

Вот несколько примеров того, что я получаю при запуске функции. По какой-то причине он не понимает, что startDay выше, чем endDay! хз что происходит не так

Когда startDay меньше endDay (правильный вывод)

Когда endDay меньше startDay (неправильный вывод)


person zlyt    schedule 02.09.2018    source источник


Ответы (1)


Скорее всего, причина в том, что и this.startDay, и this.endDay являются строками, поэтому сравнение "28" < "4" равно true (в данном случае сравниваются первые символы '2' и '4').

Здесь может помочь явное приведение к числам, например Number(this.startDay) < Number(this.endDay).

person sbedulin    schedule 02.09.2018
comment
Вау, не могу поверить, что я этого не видел. Так просто, лол. Спасибо! - person zlyt; 03.09.2018