generated from CodeYourFuture/Module-Template
-
-
Notifications
You must be signed in to change notification settings - Fork 273
London | 26-ITP-January | Mouawia Elkhalifa | Sprint 2 | Data Groups #1077
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
MouawiaElkhalifa
wants to merge
4
commits into
CodeYourFuture:main
Choose a base branch
from
MouawiaElkhalifa:sprint-2
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
3fb57ef
Complete Sprint 2 exercises
MouawiaElkhalifa 35a9a9b
fix: address mentor feedback for contains, tally, and invert
MouawiaElkhalifa 9c4818e
Fix invert logic/comments and strengthen contains tests for Sprint 2
MouawiaElkhalifa 42a933e
Final fix: Corrected invert answers (a-b) and strengthened contains t…
MouawiaElkhalifa File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,10 @@ | ||
| function contains() {} | ||
| function contains(obj, prop) { | ||
| if (typeof obj !== "object" || obj === null || Array.isArray(obj)) { | ||
| return false; | ||
| } | ||
|
|
||
| module.exports = contains; | ||
| // Use the static Object.hasOwn() method | ||
| return Object.hasOwn(obj, prop); | ||
| } | ||
|
|
||
| module.exports = contains; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,13 @@ | ||
| function createLookup() { | ||
| // implementation here | ||
| function createLookup(countryCurrencyPairs) { | ||
| const lookup = {}; | ||
|
|
||
| for (const [countryCode, countryCurrency] of countryCurrencyPairs) { | ||
| lookup[countryCode] = countryCurrency; | ||
| } | ||
|
|
||
| return lookup; | ||
| } | ||
|
|
||
| module.exports = createLookup; | ||
|
|
||
|
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,19 @@ | ||
| function tally() {} | ||
| function tally(arr) { | ||
| if (!Array.isArray(arr)) { | ||
| throw new Error("Input must be an array"); | ||
| } | ||
|
|
||
| const result = Object.create(null); | ||
|
|
||
| for (const item of arr) { | ||
| if (result[item] === undefined) { | ||
| result[item] = 1; | ||
| } else { | ||
| result[item] = result[item] + 1; | ||
| } | ||
| } | ||
|
|
||
| return result; | ||
| } | ||
|
|
||
| module.exports = tally; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,29 +1,50 @@ | ||
| // Let's define how invert should work | ||
| // a) What is the current return value when invert is called with { a : 1 } | ||
| // { key: 1 } | ||
|
|
||
| // b) What is the current return value when invert is called with { a: 1, b: 2 } | ||
| // { key: 2 } | ||
|
|
||
| // c) What is the target return value when invert is called with { a: 1, b: 2 } | ||
| // { "1": "a", "2": "b" } | ||
|
|
||
| // Given an object | ||
| // When invert is passed this object | ||
| // Then it should swap the keys and values in the object | ||
| // d) What does Object.entries return? Why is it needed in this program? | ||
| // It returns an array of [key, value] pairs. | ||
| // It is needed so we can loop through both keys and values at the same time when inverting the object. | ||
|
|
||
| // E.g. invert({x : 10, y : 20}), target output: {"10": "x", "20": "y"} | ||
| // e) Explain why the current return value is different from the target output | ||
| // The original code used 'invertedObj.key = value', which creates a property literally named "key" | ||
| // instead of using the value dynamically. | ||
| // This causes each iteration to overwrite the previous one. | ||
| // It also does not handle collisions (multiple keys with the same value). | ||
|
|
||
| // f) Fix the implementation of invert (and write tests to prove it's fixed!) | ||
| function invert(obj) { | ||
| const invertedObj = {}; | ||
|
|
||
| for (const [key, value] of Object.entries(obj)) { | ||
| invertedObj.key = value; | ||
| if (invertedObj[value] === undefined) { | ||
| invertedObj[value] = key; | ||
| } else if (Array.isArray(invertedObj[value])) { | ||
| invertedObj[value].push(key); | ||
| } else { | ||
| invertedObj[value] = [invertedObj[value], key]; | ||
| } | ||
| } | ||
|
|
||
| return invertedObj; | ||
| } | ||
|
|
||
| // a) What is the current return value when invert is called with { a : 1 } | ||
|
|
||
| // b) What is the current return value when invert is called with { a: 1, b: 2 } | ||
| // --- CONSOLE TESTS TO PROVE IT IS FIXED --- | ||
| console.log("Test 1 (Simple):", invert({ a: 1 })); | ||
| // Expected: { '1': 'a' } | ||
|
|
||
| // c) What is the target return value when invert is called with {a : 1, b: 2} | ||
| console.log("Test 2 (No duplicates):", invert({ x: 10, y: 20 })); | ||
| // Expected: { '10': 'x', '20': 'y' } | ||
|
|
||
| // c) What does Object.entries return? Why is it needed in this program? | ||
| console.log("Test 3 (Collision):", invert({ a: 1, b: 1 })); | ||
| // Expected: { '1': ['a', 'b'] } | ||
|
|
||
| // d) Explain why the current return value is different from the target output | ||
| console.log("Test 4 (Triple collision):", invert({ a: 1, b: 1, c: 1 })); | ||
| // Expected: { '1': ['a', 'b', 'c'] } | ||
|
|
||
| // e) Fix the implementation of invert (and write tests to prove it's fixed!) | ||
| module.exports = invert; | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You deleted your answers to these questions.
Anyway, do you recognise what this statement (in the original code) does?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Restored missing answers (a-e) and corrected the logic. Replaced literal .key with dynamic [value] notation to prevent overwriting and ensure keys are swapped correctly.