Значение не добавляется в tipArray и totalArray, хотя код синтаксически правильный, и я думаю, что и логически - PullRequest
2 голосов
/ 09 июля 2020

Помогите, пожалуйста. Вопрос в том, чтобы рассчитать чаевые и общую сумму, уплаченную человеком, использующим объект и l oop. Заданная сумма счета: 124, 48, 268, 180, 42 (все id $) Хотя это не имеет значения

  1. Создайте объект с массивом для значений счета
  2. Добавить метод расчета чаевых
  3. Этот метод должен включать al oop для перебора всех оплаченных счетов и выполнения расчетов чаевых
  4. В качестве выходных данных массив кратера 1, содержащий все наконечники и еще один массив, содержащий окончательную оплаченную сумму.
let billValue = {
  tipArray: [],
  totalArray: [],
  bill: [124, 48, 268, 180, 42],
  tipCalc: function() {
    for (let i = 0; i < this.bill.length(); i++) {
      switch (true) {
        case this.bill[i] < 50:
          tipValue = (20 / 100) * bill[i];
          totalValue = tipValue + this.bill[i];
          tipArray.push(tipValue);
          totalArray.push(totalValue);
          break;
        case this.bill[i] > 50 && this.bill[i] < 200:
          tipValue = (15 / 100) * bill[i];
          totalValue = tipValue + this.bill[i];
          tipArray.push(tipValue);
          totalArray.push(totalValue);
          break;
        case this.bill[i] > 200:
          tipValue = (10 / 100) * bill[i];
          totalValue = tipValue + this.bill[i];
          tipArray.push(tipValue);
          totalArray.push(totalValue);
          break;
        default:

      }
    }
  }

}
console.log(billValue.tipArray);
console.log(billValue.totalArray);

1 Ответ

1 голос
/ 09 июля 2020

Длина массива - это не функция, а свойство.

for (let i = 0; i < this.bill.length; i++)

Вам также необходимо вызвать функцию tipCalc перед регистрацией массивов.

billValue.tipCalc();
console.log(billValue.tipArray);
console.log(billValue.totalArray);

Вам также необходимо использовать this, чтобы квалифицировать доступ к свойствам объекта и заключить все ваши варианты переключения в блоки, поскольку переменные не могут быть повторно объявлены в том же блоке с помощью let. Исправленный код выглядит следующим образом:

let billValue = {
  tipArray: [],
  totalArray: [],
  bill: [124, 48, 268, 180, 42],
  tipCalc: function() {
    for (let i = 0; i < this.bill.length; i++) {
      switch (true) {
        case this.bill[i] < 50:{
          let tipValue = (20 / 100) * this.bill[i];
            let totalValue = tipValue + this.bill[i];
          this.tipArray.push(tipValue);
          this.totalArray.push(totalValue);
          break;}
        case this.bill[i] > 50 && this.bill[i] < 200:{
          let tipValue = (15 / 100) * this.bill[i];
          let totalValue = tipValue + this.bill[i];
          this.tipArray.push(tipValue);
          this.totalArray.push(totalValue);
          break;}
        case this.bill[i] > 200:{
          let tipValue = (10 / 100) * this.bill[i];
          let totalValue = tipValue + this.bill[i];
          this.tipArray.push(tipValue);
          this.totalArray.push(totalValue);
          break;}
        default:

      }
    }
  }

}
billValue.tipCalc();
console.log(billValue.tipArray);
console.log(billValue.totalArray);
...