// orderString = "-์ํ๋ฒํธ ์๋"
const orderData = orderString.split(/\s+/);
// orderData = ["-์ํ๋ฒํธ","์๋"]
// priceList = { ์ํ๋ฒํธ : ์ํ๊ธ์ก }
const productPrice = priceList[orderData[0].split("-")[1]];
// ์ํ ๊ฐ๊ฒฉ
const orderPrice = parseInt(orderData[1])*productPrice;
// ์ฃผ๋ฌธ๊ฐ = ์ํ ๊ฐ๊ฒฉ*์๋
// ๋ณ๊ฒฝํ
const orderRecord = parseOrder(order);
const orderPrice = price(orderRecord,priceList);
//์ฃผ๋ฌธ๊ฐ
function parseOrder(aString){// ์ฃผ๋ฌธ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ
const values = aString.split(/\s+/);
return ({ productId: values[0].split("-")[1], quantity: parseInt(values[1]), });
}
function price(order,priceList){
return order.quantity*priceList[order.productId];
}
1. ๋ ๋ฒ์งธ ๋จ๊ณ์ ํด๋นํ๋ ์ฝ๋๋ฅผ ๋
๋ฆฝ ํจ์๋ก ์ถ์ถํ๋ค.
2. ํ
์คํธํ๋ค.
3. ์ค๊ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด์ ์์์ ์ถ์ถํ ํจ์์ ์ธ์๋ก ์ถ๊ฐํ๋ค.
4. ํ
์คํธ ํ๋ค.
5. ์ถ์ถํ ๋๋ฒ์งธ ๋จ๊ณ ํจ์์ ๋งค๊ฐ๋ณ์๋ฅผ ํ๋์ฉ ๊ฒํ ํ๋ค. ๊ทธ ์ค ์ฒซ ๋ฒ์งธ ๋จ๊ณ์์ ์ฌ์ฉ๋๋ ๊ฒ์ ์ค๊ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ์ฎ๊ธด๋ค. ํ๋์ฉ ์ฎ๊ธธ ๋๋ง๋ค ํ
์คํธํ๋ค.
6. ์ฒซ ๋ฒ์งธ ๋จ๊ณ ์ฝ๋๋ฅผ ํจ์๋ก ์ถ์ถํ๋ฉด์ ์ค๊ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ฐํํ๋๋ก ๋ง๋ ๋ค.
์ํ์ ๊ฒฐ์ ๊ธ์ก ๊ณ์ฐ
1. ์ํ ๊ฐ๊ฒฉ ๊ณ์ฐ : ๋ฐ์ดํฐ - ์ํ์ ๋ณด
2. ๋ฐฐ์ก๋น ๊ณ์ฐ : ๋ฐ์ดํฐ - ๋ฐฐ์ก์ ๋ณด
// ๋ณ๊ฒฝ ์
function priceOrder(product, quantity, shippingMethod){
// 1. ์ํ ๊ฐ๊ฒฉ ๊ณ์ฐ
const basePrice = product.basePrice*quantity;
const discount = Math.max(quantity-product.discountThreshold,0)
*product.basePrice*product.discountRate;
// 2. ๋ฐฐ์ก๋น ๊ณ์ฐ
const shippingPerCase = (basePrice>shippingMethod.discountThreshold)
?shippingMethod.discountedFee:shippingMethod.feePerCase;
const shippingCost = quantity*shippingPerCase;
const price = basePrice-discount + shippingCost;
return price;
}
ํจ์๋ก ์ถ์ถํ๋ค.
// ๋๋ฒ์งธ ๊ณ์ฐ ๋ถ๋ถ์ ํจ์๋ก ์ถ์ถํ๋ค.
function priceOrder(product, quantity, shippingMethod){
// 1. ์ํ ๊ฐ๊ฒฉ ๊ณ์ฐ
const basePrice = product.basePrice*quantity;
const discount = Math.max(quantity-product.discountThreshold,0)
*product.basePrice*product.discountRate;
// 2. ๋ฐฐ์ก๋น ๊ณ์ฐ
const price = applyShipping(basePrice,shippingMethod,quantity,discount);
return price;
}
function applyShipping(basePrice, shippingMethod, quantity, discount){
const shippingPerCase = (basePrice>shippingMethod.discountThreshold)
?shippingMethod.discountedFee:shippingMethod.feePerCase;
const shippingCost = quantity*shippingPerCase;
const price = basePrice-discount + shippingCost;
return price;
}
์ค๊ฐ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ง๋ ๋ค.
function priceOrder(product, quantity, shippingMethod){
const basePrice = product.basePrice*quantity;
const discount = Math.max(quantity-product.discountThreshold,0)
*product.basePrice*product.discountRate;
// ์ค๊ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ
const priceData = {basePrice:basePrice, quantity:quantity, discount:discount};
const price = applyShipping(priceData,shippingMethod);
return price;
}
function applyShipping(priceData, shippingMethod){
const shippingPerCase = (priceData.basePrice>shippingMethod.discountThreshold)
?shippingMethod.discountedFee:shippingMethod.feePerCase;
const shippingCost = priceData.quantity*shippingPerCase;
const price = priceData.basePrice-priceData.discount + shippingCost;
return price;
}
์ฒซ๋ฒ์งธ ํจ์๋ก ์ถ์ถํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ํจ์์ ๋ฆฌํด๊ฐ์ด ์ค๊ฐ ๋ฐ์ดํฐ ํ์์ ๋๊ฒ ํ๋ค.
function priceOrder(product, quantity, shippingMethod){
const priceData = calculatePricingData(product,quantity);
return applyShipping(priceData,shippingMethod);
}
function calculatePricingData(product,quantity){
const basePrice = product.basePrice*quantity;
const discount = Math.max(quantity-product.discountThreshold,0)
*product.basePrice*product.discountRate;
return {basePrice:basePrice, quantity:quantity, discount:discount};
}
function applyShipping(priceData, shippingMethod){
const shippingPerCase = (priceData.basePrice>shippingMethod.discountThreshold)
?shippingMethod.discountedFee:shippingMethod.feePerCase;
const shippingCost = priceData.quantity*shippingPerCase;
const price = priceData.basePrice-priceData.discount + shippingCost;
return price;
}
| 7.2. ์ปฌ๋ ์ ์บก์ํํ๊ธฐ (0) | 2021.10.05 |
|---|---|
| 7.1. ๋ ์ฝ๋ ์บก์ํํ๊ธฐ (0) | 2021.10.01 |
| 6.10. ์ฌ๋ฌ ํจ์๋ฅผ ๋ณํ ํจ์๋ก ๋ฌถ๊ธฐ (0) | 2021.09.26 |
| 6.9. ์ฌ๋ฌ ํจ์๋ฅผ ํด๋์ค๋ก ๋ฌถ๊ธฐ (0) | 2021.09.26 |
| 6.8. ๋งค๊ฐ๋ณ์ ๊ฐ์ฒด ๋ง๋ค๊ธฐ (Introduce Parameter Object) (0) | 2021.09.26 |