Почему мой метод не выдвигает результаты в мой массив? - PullRequest
0 голосов
/ 22 декабря 2018

Я создал простой объект.Я пытаюсь создать метод для объекта, который манипулирует данными из одного массива и помещает данные в два новых массива.По некоторым причинам новые данные не будут заполнять два новых массива.Когда я запускаю метод john.tipCalc ();к моим пустым массивам ничего не добавляется.

let john = {
  fullName: "John Smith",
  bills: [124, 48, 268, 180, 42],
  tips : [],
  finalBill : [],
  tipCalc: function() {
     this.bills.forEach(function(bill) {
       let percentage;
       if (bill < 50) {
          percentage = 0.2;
       } else if (bill >= 50 && bill <= 200) {
          percentage = 0.15;
       } else {
          percentage = 0.1;
       }
      this.tips = bill * percentage;
      this.finalBill = bill + bill * percentage;
    });
  }
};

Я хочу, чтобы массив 'tips' заполнялся подсказкой, которая рассчитывается в методе tipCalc как счет * в процентах.Затем я хочу, чтобы массив 'finalBill' заполнялся суммой векселей плюс процентный процент, который рассчитывается как процент по счету + счет *.

Ответы [ 3 ]

0 голосов
/ 22 декабря 2018

Вам нужно push() в tips.Вам также нужно будет использовать функцию стрелки () => {} в forEach, если вы хотите использовать this.tips таким, какой вы есть:

let john = {
    fullName: "John Smith",
    bills: [124, 48, 268, 180, 42],
    tips : [],
    finalBill : 0,                  // shouldn't this be a single number?
    tipCalc: function() {
       this.bills.forEach(bill => { // use arrow function
         let percentage;
         if (bill < 50) {
            percentage = 0.2;
         } else if (bill >= 50 && bill <= 200) {
            percentage = 0.15;
         } else {
            percentage = 0.1;
         }
        this.tips.push(bill * percentage);    // push()!
        this.finalBill +=  bill * percentage; // add
      });
    }
  };

 john.tipCalc()
 console.log("Tips", john.tips)
 console.log("Final:", john.finalBill )

Если по какой-то причине вы не можете использовать функции стрелок, вы можете передать this в качестве окончательного параметра forEach()

0 голосов
/ 22 декабря 2018

Здесь:

this.tips = bill * percentage;
this.finalBill = bill + bill * percentage;

Вы перезаписываете массивы с результатом этой операции.

Вам нужно , чтобы нажать их:

this.tips.push(bill * percentage);
this.finalBill.push(bill + bill * percentage);
0 голосов
/ 22 декабря 2018

Вы должны использовать Array.push ():

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push https://www.w3schools.com/jsref/jsref_push.asp

Исправление:

this.tips.push(bill * percentage);
this.finalBill.push(bill + bill * percentage);
...