From 4858927773e632fab3f6397014bd317a7ded5c0f Mon Sep 17 00:00:00 2001 From: TzeMingHo Date: Wed, 29 Oct 2025 13:16:32 +0000 Subject: [PATCH 1/7] completed exercise-1 --- Sprint-1/destructuring/exercise-1/exercise.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sprint-1/destructuring/exercise-1/exercise.js b/Sprint-1/destructuring/exercise-1/exercise.js index 1ff2ac5c..90eb4795 100644 --- a/Sprint-1/destructuring/exercise-1/exercise.js +++ b/Sprint-1/destructuring/exercise-1/exercise.js @@ -6,7 +6,7 @@ const personOne = { // Update the parameter to this function to make it work. // Don't change anything else. -function introduceYourself(___________________________) { +function introduceYourself({name, age, favouriteFood}) { console.log( `Hello, my name is ${name}. I am ${age} years old and my favourite food is ${favouriteFood}.` ); From 88584806bf21baa448d4211e04ae64598dd322bd Mon Sep 17 00:00:00 2001 From: TzeMingHo Date: Wed, 29 Oct 2025 13:50:01 +0000 Subject: [PATCH 2/7] completed exercise2 --- Sprint-1/destructuring/exercise-2/exercise.js | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Sprint-1/destructuring/exercise-2/exercise.js b/Sprint-1/destructuring/exercise-2/exercise.js index e11b75eb..e9c5cf45 100644 --- a/Sprint-1/destructuring/exercise-2/exercise.js +++ b/Sprint-1/destructuring/exercise-2/exercise.js @@ -70,3 +70,23 @@ let hogwarts = [ occupation: "Teacher", }, ]; + + +function gryffindorHouse(hogwarts) { + return hogwarts.reduce((memberList, {firstName, lastName, house}) => { + if (house === 'Gryffindor') { + memberList.push(`${firstName} ${lastName}`) + } + return memberList + }, []).join("\n") +} + +function teachersWithPets(hogwarts) { + return hogwarts.reduce((nameList, {firstName, lastName, pet, occupation}) => { + if (occupation === "Teacher" && pet !== null) { + nameList.push(`${firstName} ${lastName}`) + } + return nameList; + }, []).join("\n") +} + From bacdb7cac2279cd2891d22a7206b3c777f31b544 Mon Sep 17 00:00:00 2001 From: TzeMingHo Date: Wed, 29 Oct 2025 14:30:34 +0000 Subject: [PATCH 3/7] completed exercise-3 --- Sprint-1/destructuring/exercise-3/exercise.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Sprint-1/destructuring/exercise-3/exercise.js b/Sprint-1/destructuring/exercise-3/exercise.js index b3a36f4e..5db83031 100644 --- a/Sprint-1/destructuring/exercise-3/exercise.js +++ b/Sprint-1/destructuring/exercise-3/exercise.js @@ -6,3 +6,21 @@ let order = [ { itemName: "Hot Coffee", quantity: 2, unitPricePence: 100 }, { itemName: "Hash Brown", quantity: 4, unitPricePence: 40 }, ]; + + +function receiptAndCosts(order) { + let total = 0; + const quantitySpace = 8; + const itemSpace = 20; + const costSpace = 5 + let receipt = [`${'QTY'.padEnd(quantitySpace, " ")}${'ITEM'.padEnd(itemSpace, " ")}${'TOTAL'.padEnd(costSpace, " ")}`] + order.map(({itemName, quantity, unitPricePence}) => { + receipt.push(`${String(quantity).padEnd(quantitySpace, " ")}${itemName.padEnd(itemSpace, " ")}${String(Number(unitPricePence / 100 * quantity).toFixed(2)).padEnd(costSpace, " ")}`) + total += unitPricePence / 100 * quantity + }) + receipt.push(" ") + receipt.push(`Total: ${total.toFixed(2)}`) + return receipt.join("\n") +} + +console.log(receiptAndCosts(order)) \ No newline at end of file From 141a1155befc3d62213583f01ba67f4bd3b83fa3 Mon Sep 17 00:00:00 2001 From: TzeMingHo Date: Thu, 30 Oct 2025 16:21:56 +0000 Subject: [PATCH 4/7] updated exercise-2 and exercise-3 --- Sprint-1/destructuring/exercise-2/exercise.js | 8 ++----- Sprint-1/destructuring/exercise-3/exercise.js | 24 ++++++++++++++----- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/Sprint-1/destructuring/exercise-2/exercise.js b/Sprint-1/destructuring/exercise-2/exercise.js index e9c5cf45..31222e63 100644 --- a/Sprint-1/destructuring/exercise-2/exercise.js +++ b/Sprint-1/destructuring/exercise-2/exercise.js @@ -73,12 +73,7 @@ let hogwarts = [ function gryffindorHouse(hogwarts) { - return hogwarts.reduce((memberList, {firstName, lastName, house}) => { - if (house === 'Gryffindor') { - memberList.push(`${firstName} ${lastName}`) - } - return memberList - }, []).join("\n") + return hogwarts.filter(({house}) => house === 'Gryffindor').map(({firstName, lastName}) => `${firstName} ${lastName}`).join("\n") } function teachersWithPets(hogwarts) { @@ -90,3 +85,4 @@ function teachersWithPets(hogwarts) { }, []).join("\n") } +console.log(gryffindorHouse(hogwarts)); diff --git a/Sprint-1/destructuring/exercise-3/exercise.js b/Sprint-1/destructuring/exercise-3/exercise.js index 5db83031..899a4fa6 100644 --- a/Sprint-1/destructuring/exercise-3/exercise.js +++ b/Sprint-1/destructuring/exercise-3/exercise.js @@ -10,14 +10,26 @@ let order = [ function receiptAndCosts(order) { let total = 0; - const quantitySpace = 8; - const itemSpace = 20; - const costSpace = 5 - let receipt = [`${'QTY'.padEnd(quantitySpace, " ")}${'ITEM'.padEnd(itemSpace, " ")}${'TOTAL'.padEnd(costSpace, " ")}`] - order.map(({itemName, quantity, unitPricePence}) => { - receipt.push(`${String(quantity).padEnd(quantitySpace, " ")}${itemName.padEnd(itemSpace, " ")}${String(Number(unitPricePence / 100 * quantity).toFixed(2)).padEnd(costSpace, " ")}`) + + let receipt = [] + + function orderLineFormatting(...args) { + const orderLineSpacing = [8, 20, 5] + let formattedOrderLine = '' + for (let index = 0; index < args.length; index++) { + formattedOrderLine += `${String(args[index]).padEnd(orderLineSpacing[index], " ")}` + } + return formattedOrderLine + } + + receipt.push(orderLineFormatting("QTY", "ITEM", "TOTAL")); + + order.forEach(({itemName, quantity, unitPricePence}) => { + const subTotal = (unitPricePence / 100 * quantity).toFixed(2) + receipt.push(orderLineFormatting(quantity, itemName, subTotal)) total += unitPricePence / 100 * quantity }) + receipt.push(" ") receipt.push(`Total: ${total.toFixed(2)}`) return receipt.join("\n") From 951c77baf294f86c74d5e1f8407b0f8e65e635f3 Mon Sep 17 00:00:00 2001 From: TzeMingHo Date: Fri, 31 Oct 2025 15:34:37 +0000 Subject: [PATCH 5/7] updated exercise-2 and exercise-3 --- Sprint-1/destructuring/exercise-2/exercise.js | 16 +++++++++------- Sprint-1/destructuring/exercise-3/exercise.js | 3 +++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Sprint-1/destructuring/exercise-2/exercise.js b/Sprint-1/destructuring/exercise-2/exercise.js index 31222e63..3e35d0c5 100644 --- a/Sprint-1/destructuring/exercise-2/exercise.js +++ b/Sprint-1/destructuring/exercise-2/exercise.js @@ -73,16 +73,18 @@ let hogwarts = [ function gryffindorHouse(hogwarts) { - return hogwarts.filter(({house}) => house === 'Gryffindor').map(({firstName, lastName}) => `${firstName} ${lastName}`).join("\n") + return hogwarts + .filter(({house}) => house === 'Gryffindor') + .map(({firstName, lastName}) => `${firstName} ${lastName}`) + .join("\n") } function teachersWithPets(hogwarts) { - return hogwarts.reduce((nameList, {firstName, lastName, pet, occupation}) => { - if (occupation === "Teacher" && pet !== null) { - nameList.push(`${firstName} ${lastName}`) - } - return nameList; - }, []).join("\n") + return hogwarts + .filter(({occupation, pet}) => occupation === "Teacher" && pet !== null) + .map(({firstName, lastName}) => `${firstName} ${lastName}`) + .join("\n") } console.log(gryffindorHouse(hogwarts)); +console.log(teachersWithPets(hogwarts)) diff --git a/Sprint-1/destructuring/exercise-3/exercise.js b/Sprint-1/destructuring/exercise-3/exercise.js index 899a4fa6..e3626f44 100644 --- a/Sprint-1/destructuring/exercise-3/exercise.js +++ b/Sprint-1/destructuring/exercise-3/exercise.js @@ -14,6 +14,9 @@ function receiptAndCosts(order) { let receipt = [] function orderLineFormatting(...args) { + if (args.length !== 3) { + throw new Error("expecting 3 arguments in order of quantity, itemName, and subTotal") + } const orderLineSpacing = [8, 20, 5] let formattedOrderLine = '' for (let index = 0; index < args.length; index++) { From 2b13ee375699aa9dc294efb454ee252a5aa337c8 Mon Sep 17 00:00:00 2001 From: TzeMingHo Date: Fri, 7 Nov 2025 11:23:57 +0000 Subject: [PATCH 6/7] adding a comment for orderLineFormatting usage --- Sprint-1/destructuring/exercise-3/exercise.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Sprint-1/destructuring/exercise-3/exercise.js b/Sprint-1/destructuring/exercise-3/exercise.js index e3626f44..98a2cd61 100644 --- a/Sprint-1/destructuring/exercise-3/exercise.js +++ b/Sprint-1/destructuring/exercise-3/exercise.js @@ -13,6 +13,9 @@ function receiptAndCosts(order) { let receipt = [] + /* This function orderLineFormatting requires 3 arguments in strict order + 1: quantity, 2: itemName, 3: subTotal + */ function orderLineFormatting(...args) { if (args.length !== 3) { throw new Error("expecting 3 arguments in order of quantity, itemName, and subTotal") From 4aca32fa37b9f21207724a7f272142cf3630faf4 Mon Sep 17 00:00:00 2001 From: TzeMingHo Date: Fri, 7 Nov 2025 11:29:07 +0000 Subject: [PATCH 7/7] updated the comment for function orderLineFormatting --- Sprint-1/destructuring/exercise-3/exercise.js | 1 + 1 file changed, 1 insertion(+) diff --git a/Sprint-1/destructuring/exercise-3/exercise.js b/Sprint-1/destructuring/exercise-3/exercise.js index 98a2cd61..d5de1689 100644 --- a/Sprint-1/destructuring/exercise-3/exercise.js +++ b/Sprint-1/destructuring/exercise-3/exercise.js @@ -15,6 +15,7 @@ function receiptAndCosts(order) { /* This function orderLineFormatting requires 3 arguments in strict order 1: quantity, 2: itemName, 3: subTotal + and will return a string */ function orderLineFormatting(...args) { if (args.length !== 3) {