Это дает NaN вместо содержимого массива - PullRequest
0 голосов
/ 10 апреля 2020

Это базовый c JavaScript код для вычисления «подсказок» для данного значения. Я что-то здесь не так делаю? Это дает мне null массивы или NaN вместо содержимого моего массива.

var john = {

  fullName: 'john smith',
  bills: [124, 48, 32, 268, 180, 42],

  calcTips: function () {
    this.tips = [0];
    this.finalvalue = [0];

    for (var i = 0; i < this.bills.length; i += 1) {
      var percentage;

      if (this.bills[i] < 50) {
        percentage: .2;
      }
      else if (this.bills[i] >= 50 && this.bills[i] < 200) {
        percentage: .15;
      }
      else {
        percentage: .1;
      }

      this.tips[i] = this.bills[i] * percentage;
      this.finalvalue[i] = this.bills[i] + this.bills[i] * percentage;
    }
  }
}

Ответы [ 3 ]

1 голос
/ 10 апреля 2020

Как уже указывалось в других ответах, проблема root - это строки percentage:. изменение их на присваивание переменных percentage = 0.2; исправит это.

Вы можете спросить себя: «Почему это не выбрасывает ошибки?».

Этот синтаксис используется для определения «метки» , Метка используется для идентификации операторов, которые используют break или continue. По сути, это способ идентифицировать al oop, позволяющий вам указать, какой l oop вы специально нарушаете или продолжаете. У MDN есть несколько хороших примеров использования для ярлыков . Хотя он редко используется, он есть в вашем заднем кармане:)

1 голос
/ 10 апреля 2020

Это предполагает, что в массиве tips уже есть значения, равные количеству значений в массиве bills, и обновляет соответствующее значение в tips (неправильно, я мог бы добавить. Покрыто позже).

Однако, поскольку вы инициализировали tips только с одним значением 0, l oop не имеет ничего для обновления после первой итерации.

Вместо этого я бы порекомендовал:


var john = {
    fullName: 'john smith',
    bills: [124, 48, 32, 268, 180, 42],

    calcTips: function() {

        /* I'm assuming you initialized these with one value of 0 because you're doing 
        a calculation later using these, so we'll leave them be */
        this.tips = [0];
        this.finalvalue = [0];

        for ( var i = 0; i < this.bills.length; i+= 1 ) { 
            var percentage;
            /* Reassigning variables requires the equals sign (=) rather than 
            a colon (:) */

            if (this.bills[i] < 50) {
               percentage = .2;
            } else if (this.bills[i] >= 50 && this.bills[i] < 200 ) {
                percentage = .15; 
            } else {
                percentage = .1;
            }

            /* If i is 0, only update the first value of tips (using splice()), past 
            that, push in a new value */
            if (i === 0) {
               this.tips.splice(i, 1, this.bills[i] * percentage ;
            } else {
                this.tips.push(this.bills[i] * percentage);
            } 

            this.finalvalue[i] = this.bills[i] + this.bills[i] * percentage;
        }
    }
}

0 голосов
/ 10 апреля 2020

Вам просто нужно использовать percentage = value вместо этих :

var john = {
  fullName: 'john smith',
  bills: [124, 48, 32, 268, 180, 42],


  calcTips: function() {

      this.tips = [0];
      this.finalvalue = [0];

  for ( var i = 0; i < this.bills.length; i+= 1 ) { 
      var percentage = 0;

      if (this.bills[i] < 50) {
          percentage= .2;
      } else if (this.bills[i] >= 50 && this.bills[i] < 200 ) {

          percentage= .15; 
      }

          else {
          percentage= .1;
      }

      this.tips[i] = this.bills[i] * percentage ;
      this.finalvalue[i] = this.bills[i] + this.bills[i] * percentage;
    }
  }
}
...