Как упростить код при помощи функций?
const products = [
{name: 'Apple', price: 20},
{name: 'Cherry', price: 10},
{name: 'Banana', price: 15},
{name: 'Orange', price: 25},
{name: 'Lemon', price: 17},
{name: 'Pear', price: 30}
];
const GRN_PER_DOLLAR = 41;
const DISCOUNT_START_FROM = 10000;
const DISCOUNT = 20;
for (let prodId = 0;prodId < products.length;prodId++) {
console.log(`${prodId + 1} ${products[prodId].name} ${products[prodId].price}`);
}
let prodNum;
do {
prodNum = prompt('Write product number:');
if (prodNum === null) {
break;
}
prodNum--;
} while (prodNum < 0 || prodNum > products.length - 1 || isNaN(prodNum));
if (typeof prodNum === 'number') {
const product = products[prodNum];
console.log(product);
let prodCount;
do {
prodCount = prompt('Write product count:');
if (prodCount === null) {
break;
}
prodCount = +prodCount;
} while(prodCount <= 0 || isNaN(prodCount));
if (typeof prodCount === 'number') {
const totalProdPrice = prodCount * product.price;
console.log(`Total price: $${totalProdPrice}`);
if (totalProdPrice * GRN_PER_DOLLAR > DISCOUNT_START_FROM) {
console.log(`Congrats, you get a discount ${DISCOUNT}%`);
console.log(`Your total price is: ${totalProdPrice * (100 - DISCOUNT) / 100}`);
}
}
}
Есть такой код, как его упростить и уменьшить при помощи функций. (кому не лень покажите как это должно выглядеть)
Ответы (1 шт):
Автор решения: SwaD
→ Ссылка
Для упрощения кода при помощи функций, вынесем в функции повторяющийся код и пытаемся сгруппировать однотипные операции.
В примере ниже, все запросы данных от пользователя вынесены в отдельную функцию. Чтоб бы ее унифицировать, созданы 2 фукнции с проверками.
const products = [
{name: 'Apple', price: 20},
{name: 'Cherry', price: 10},
{name: 'Banana', price: 15},
{name: 'Orange', price: 25},
{name: 'Lemon', price: 17},
{name: 'Pear', price: 30}
];
const GRN_PER_DOLLAR = 41;
const DISCOUNT_START_FROM = 10000;
const DISCOUNT = 20;
for (let prodId = 0; prodId < products.length; prodId++) {
console.log(`${prodId + 1} ${products[prodId].name} ${products[prodId].price}`);
}
// Условия на наличие товара
function conditionNum(num) {
return num < 1 || num > products.length;
}
// Условия на количество товара
function conditionCount(num) {
return num <= 0;
}
// Функция запрашивает данные у клиента и проверяет их
function answerClient(textAnswer, condition) {
let answer;
do {
answer = Number(prompt(textAnswer)); // Сразу преобразуем к числу
if (!answer) {
break;
}
} while (condition(answer))
return answer;
}
// Получаем товар
const product = products[answerClient('Write product number:', conditionNum) - 1];
console.log(product);
// Получаем количество
const prodCount = answerClient('Write product count:', conditionCount);
const totalProdPrice = prodCount * product.price;
console.log(`Total price: $${totalProdPrice}`);
if (totalProdPrice * GRN_PER_DOLLAR > DISCOUNT_START_FROM) {
console.log(`Congrats, you get a discount ${DISCOUNT}%`);
console.log(`Your total price is: ${totalProdPrice * (100 - DISCOUNT) / 100}`);
}
Если идея с передачей функций в качестве параметра не понятна или не нравится, можно переписать функцию answerClient вот так:
function answerClient(textAnswer, type) {
let answer;
do {
answer = Number(prompt(textAnswer)); // Сразу преобразуем к числу
if (!answer) {
break;
}
} while (type === 'product' ? conditionNum(answer) : conditionCount(answer))
return answer;
}
И вызывать ее соответственно
const product = products[answerClient('Write product number:', 'product') - 1];
const prodCount = answerClient('Write product count:', 'count');