Back to js-datatype-foundation
08-paan-shop.js
JavaScript
1/**
2 * 🍃 Paan Shop Menu - Object Transform
3 *
4 * Khalil Bhai ki paan shop hai jo purani Delhi mein famous hai.
5 * Menu system banana hai jisme objects ko merge karna, freeze karna,
6 * aur transform karna hai. Object transform ka tour!
7 *
8 * Methods to explore: Object.assign(), Object.freeze(),
9 * spread operator {...}, Object.entries(), Object.fromEntries()
10 *
11 * Functions:
12 *
13 * 1. createPaanOrder(basePaan, customizations)
14 * - Object.assign({}, basePaan, customizations) se NEW order object banao
15 * - Original basePaan ko mutate MAT karo!
16 * - Agar basePaan object nahi hai ya null hai, return {}
17 * - Agar customizations object nahi hai, sirf basePaan ki copy return karo
18 * - Example: createPaanOrder({type:"meetha",price:30}, {extra:"gulkand",price:50})
19 * => {type:"meetha", price:50, extra:"gulkand"}
20 *
21 * 2. freezeMenu(menu)
22 * - Object.freeze() se menu ko immutable banao
23 * - Return: frozen object
24 * - Agar menu object nahi hai ya null hai, return {}
25 * - Frozen ke baad koi modification kaam nahi karegi!
26 * - Example: const frozen = freezeMenu({meetha:30}); frozen.meetha = 100; // still 30
27 *
28 * 3. updatePrices(menu, increase)
29 * - Object.entries() se [key, value] pairs lo
30 * - Har price mein increase add karo
31 * - Object.fromEntries() se wapas object banao
32 * - Return: NEW object (original mat badlo!)
33 * - Agar menu object nahi hai ya increase number nahi hai, return {}
34 * - Example: updatePrices({meetha:30, saada:20}, 10) => {meetha:40, saada:30}
35 *
36 * 4. mergeDailySpecials(regularMenu, specialsMenu)
37 * - Spread operator {...regularMenu, ...specialsMenu} se merge karo
38 * - specialsMenu ki values override karengi agar same key ho
39 * - Return: NEW merged object
40 * - Agar koi bhi object nahi hai, usse empty {} maan lo
41 * - Example: mergeDailySpecials({meetha:30}, {chocolate:60, meetha:40})
42 * => {meetha:40, chocolate:60}
43 *
44 * @example
45 * createPaanOrder({type:"meetha"}, {extra:"gulkand"}) // => {type:"meetha",extra:"gulkand"}
46 * updatePrices({meetha:30, saada:20}, 10) // => {meetha:40, saada:30}
47 */
48export function createPaanOrder(basePaan, customizations) {
49 if(typeof basePaan !== "object" || basePaan == null){
50 return {}
51 }
52 if(typeof customizations !== "object" || customizations == null){
53 return Object.assign({}, basePaan)
54 }
55
56 return Object.assign({}, basePaan, customizations)
57
58}
59
60export function freezeMenu(menu) {
61 if(typeof menu !== "object" || menu == null){
62 return {}
63 }
64 return Object.freeze(menu)
65}
66
67export function updatePrices(menu, increase) {
68
69 if(typeof menu !== "object" || typeof increase !== "number" || menu == null){
70 return {}
71 }
72
73 let keyValuePair = Object.entries(menu)
74
75 let IncreasePrice = keyValuePair.map(([key, value])=>{
76 return [key, value + increase]
77 })
78
79 return Object.fromEntries(IncreasePrice)
80
81}
82
83export function mergeDailySpecials(regularMenu, specialsMenu) {
84 if(typeof regularMenu !== "object"){
85 regularMenu = {}
86 }
87 if(typeof specialsMenu !== "object"){
88 specialsMenu = {}
89 }
90
91 return {...regularMenu, ...specialsMenu}
92}
93