Как добавить значения одного массива внутри цикла for в другой и передать его объекту - PullRequest
0 голосов
/ 01 октября 2019

У меня есть следующий код, который рассчитывает процент чаевых относительно суммы счета. Мне было поручено создать метод внутри самого объекта, чтобы хранить значения гораздо проще. Однако мне снова понадобится функция в другом коде. Чтобы избежать повторения, я создал отдельную функцию calcTip и отдельный цикл for для итерации по счетам в объекте John.

Я выяснил, как рассчитать отдельные подсказки и сохранить эти значения в подсказках. массив.

Теперь я хотел бы взять исходную сумму счета и добавить ее к соответствующему наконечнику и вставить ее в массив.

(так, чтобы finalBillsВ массиве должны отображаться суммы: [142.6, 57.60 и т. д.]])

Вот то, что я до сих пор придумал ...

var john = {
    patron: 'John',
    bills: [
        124,
        48,
        180,
        268,
        42
    ],
    tips: [],
    finalBills: []
}

function calculateTip(bill) {
    if (bill < 50) {
        percentage = (20 / 100);
    } else if (bill >= 50 && bill < 200) {
        percentage = (15 / 100);
    } else {
        percentage = (10 / 100);
    }
    return percentage * bill;
};

// console.log(john.bills.length);

for (var i = 0; i < john.bills.length; i++) {
    var bill = john.bills[i];
    console.log(bill);

    var tips = calculateTip(bill);
    var roundedTips = tips.toFixed(2);
    john.tips.push(roundedTips);
    console.log('These are the tip amounts: ', roundedTips)

    var finalBill = (roundedTips + bill);
    console.log('Final amounts: ', finalBill)
};

console.log(john)

1 Ответ

0 голосов
/ 01 октября 2019

Когда вы используете toFixed, вы получаете строку вместо числа, попробуйте использовать parseFloat, также если метод должен быть в объекте, вы можете создатьclass:

class Patron {
  constructor(patron, bills) {
    this.patron = patron;
    this.bills = bills;
    this.tips = [];
    this.finalBills = [];
  }

  calculateTip(bill) {
    let percentage;
    if (bill < 50) {
      percentage = (20 / 100);
    } else if (bill >= 50 && bill < 200) {
      percentage = (15 / 100);
    } else {
      percentage = (10 / 100);
    }
    return percentage * bill;
  }

  calculateFinalBill() {
    for (var i = 0; i < this.bills.length; i++) {
      var bill = this.bills[i];
      //console.log(bill);
      var tip = this.calculateTip(bill);
      var roundedTips = parseFloat(tip.toFixed(2));
      this.tips.push(roundedTips);
      //console.log('These are the tip amounts: ', roundedTips);

      var finalBill = (roundedTips + bill);
      //console.log('Final amounts: ', finalBill);
      this.finalBills.push(finalBill);
    }
  }
}

const john = new Patron('john', [124, 48, 180, 268, 42]);
john.calculateFinalBill();
console.log(john.finalBills);
...