Функция JS создает и передает в массив - только первый элемент - NaN - PullRequest
0 голосов
/ 03 октября 2018
var tipsArray = [];
var finalBillArray = [];
var tip;
var finalBill;

function calculator(bill) {
    finalBill = tip + bill;

    if (bill < 50) {
        tip = bill * 0.2;
    } else if (bill >= 50 && bill <= 200) {
        tip = bill * 0.15;
    } else {
        tip = bill * 0.1;
    }

    tipsArray.push(tip);
    finalBillArray.push(finalBill);

    }

calculator(124);
calculator(48);
calculator(268);

console.log(tipsArray);
console.log(finalBillArray);

Я пытаюсь решить одну из задач курса UDEMY.И не могу понять, почему только первый элемент в finalBillArray - это NaN, а остальные выглядят хорошо.

Ответы [ 4 ]

0 голосов
/ 03 октября 2018

Ваша проблема в том, что ваша переменная tip не инициализируется, когда вы вызываете функцию, другими словами, это undefined, поэтому при вызове:

finalBill = tip + bill;

Она вернет NaN, потому что,undefined+bill не является действительным Number.

Решение:

Вам просто нужно поставить строку finalBill = tip + bill; после блока if, поэтомуtip переменная может быть правильно инициализирована.

if (bill < 50) {
    tip = bill * 0.2;
} else if (bill >= 50 && bill <= 200) {
    tip = bill * 0.15;
} else {
    tip = bill * 0.1;
}
finalBill = tip + bill;

Демо:

var tipsArray = [];
var finalBillArray = [];
var tip;
var finalBill;

function calculator(bill) {

    if (bill < 50) {
        tip = bill * 0.2;
    } else if (bill >= 50 && bill <= 200) {
        tip = bill * 0.15;
    } else {
        tip = bill * 0.1;
    }
    finalBill = tip + bill;

    tipsArray.push(tip);
    finalBillArray.push(finalBill);

    }

calculator(124);
calculator(48);
calculator(268);

console.log(tipsArray);
console.log(finalBillArray);
0 голосов
/ 03 октября 2018

Есть только одно изменение: var tip = 0;

var tipsArray = [];
var finalBillArray = [];
var tip = 0;
var finalBill;

function calculator(bill) {
    finalBill = tip + bill;

    if (bill < 50) {
        tip = bill * 0.2;
    } else if (bill >= 50 && bill <= 200) {
        tip = bill * 0.15;
    } else {
        tip = bill * 0.1;
    }

    tipsArray.push(tip);
    finalBillArray.push(finalBill);

    }

calculator(124);
calculator(48);
calculator(268);

console.log(tipsArray);
console.log(finalBillArray);
0 голосов
/ 03 октября 2018

Совет следует использовать только после его расчета / инициализации.

finalBill = tip + bill;

Вы используете Совет без его инициализации, поэтому - NUM + NAN = NAN

function calculator(bill) {
    if (bill < 50) {
        tip = bill * 0.2;
    } else if (bill >= 50 && bill <= 200) {
        tip = bill * 0.15;
    } else {
       tip = bill * 0.1;
    }
    finalBill = tip + bill;
    tipsArray.push(tip);
    finalBillArray.push(finalBill);

    }
0 голосов
/ 03 октября 2018

В вашем текущем коде tip не присваивается до тех пор, пока if (bill... не проверит внутри calculator, ниже присвоения finalBill.Присвойте finalBill после , создав вместо этого tip, что не только не приведет к NaN с, но также даст вам точные результаты (ваши текущие советы для каждогосчет рассчитывается на основе чаевых предыдущего счета, а не текущего счета):

var tipsArray = [];
var finalBillArray = [];

function calculator(bill) {

  var tip;
  var finalBill;
  if (bill < 50) {
    tip = bill * 0.2;
  } else if (bill >= 50 && bill <= 200) {
    tip = bill * 0.15;
  } else {
    tip = bill * 0.1;
  }

  tipsArray.push(tip);
  finalBill = tip + bill;
  finalBillArray.push(finalBill);

}

calculator(124);
calculator(48);
calculator(268);

console.log(tipsArray);
console.log(finalBillArray);

Если вам не нравятся числа с плавающей точкой, вы также можете использовать Math.round;Math.round(tip * 100) / 100; округляется до 2 десятичных знаков.(Если вам не нужен номер, вы можете использовать toFixed(2), что проще)

var tipsArray = [];
var finalBillArray = [];

function calculator(bill) {

  var tip;
  var finalBill;
  if (bill < 50) {
    tip = bill * 0.2;
  } else if (bill >= 50 && bill <= 200) {
    tip = bill * 0.15;
  } else {
    tip = bill * 0.1;
  }
  tip = Math.round(tip * 100) / 100;

  tipsArray.push(tip);
  finalBill = tip + bill;
  finalBillArray.push(finalBill);

}

calculator(124);
calculator(48);
calculator(268);

console.log(tipsArray);
console.log(finalBillArray);
...