Javascript: понимание карты и уменьшение применительно к калькулятору чаевых - PullRequest
0 голосов
/ 08 октября 2018

Я создал калькулятор чаевых, используя операторы if-else, как показано ниже:

var billRestaurant1 = 124;
var billRestaurant2 = 48;
var billRestaurant3 = 268;


function myTip (bill) {
    if (bill < 50) {
        var tip = bill * 20 / 100;
        return tip;
    } else if (bill > 49 && bill < 200) {
        var tip = bill * 15 / 100;
        return tip;
    } else {
        var tip = bill * 10 / 100;
        return tip;
    }
}

var tipRestaurant1 = myTip(billRestaurant1);
var tipRestaurant2 = myTip(billRestaurant2);
var tipRestaurant3 = myTip(billRestaurant3);

// console.log(tipRestaurant1, tipRestaurant2, tipRestaurant3)
var sumOfTips = [tipRestaurant1, tipRestaurant2, tipRestaurant3]
console.log(sumOfTips);

var sumOfBillsAndTips = [(billRestaurant1 + tipRestaurant1),(billRestaurant2 + tipRestaurant2),(billRestaurant3 + tipRestaurant3)];
console.log(sumOfBillsAndTips);

Калькулятор возвращает два массива: один с суммой чаевых и один с общей потраченной суммой (счет + совет).

Один мой друг предложил мне изучить функциональное программирование, работать с картой и сократить для создания того же приложения.

На данный момент код ниже возвращает массив из 3 NaN: смогпожалуйста, помогите мне завершить и понять это?Большое вам спасибо.

const data = [
  {"bill":120, "user_entered_tip": 10},
  {"bill":70, "user_entered_tip": 15},
  {"bill":25, "user_entered_tip": 20}
];

const get_sum = function(data){
    return data.reduce(function(prev, curr){
        return prev + curr
    },0);
};

const get_bill = function(bill, key){

    return bill.map(function(currentValue){
        return currentValue + (currentValue * (currentValue[key] / 100));
  });
};


console.dir(get_bill(data, "user_entered_tip"))

Ответы [ 2 ]

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

Мой друг предложил мне изучать функциональное программирование, работать с картой и сокращать, чтобы создать то же приложение.

Да, я начал так же, изучая FP также:) Мой главный совет для краткости будет к

  1. Отделите ваши списки (то есть array) от function (оперируйте только с 1 элементом)
  2. Используйте функцию map(), чтобы объединить эти два элемента

Рассмотрите приведенное ниже решение -

const data = [
  {"bill":120, "tipPercent": 10},
  {"bill":70, "tipPercent": 15},
  {"bill":25, "tipPercent": 20}
]

const tips = data.map(d => d.bill * d.tipPercent / 100)
const totals = data.map((d, idx) => d.bill + tips[idx])

console.log('TIPS:', tips, ', TOTALS:', totals)
    

Надеюсь, это поможет вашему обучению.Cheers,

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

Решено благодаря комментариям m.void и SamVK:

const data = [
    {"bill":120, "user_entered_tip": 10},
  {"bill":70, "user_entered_tip": 15},
  {"bill":25, "user_entered_tip": 20}
];

const get_sum = function(bill, key){
    return bill.map(function(currentValue){
        return (currentValue.bill * (currentValue[key] / 100));
  });
};

const get_bill = function(bill, key){

    return bill.map(function(currentValue){
        return currentValue.bill + (currentValue.bill * (currentValue[key] / 100));
  });
};

console.dir(get_sum(data, "user_entered_tip"))
console.dir(get_bill(data, "user_entered_tip"))
...