diff --git a/curriculum/challenges/_meta/workshop-library-manager/meta.json b/curriculum/challenges/_meta/workshop-library-manager/meta.json index 5f1bccbd70f..56c268ab5cb 100644 --- a/curriculum/challenges/_meta/workshop-library-manager/meta.json +++ b/curriculum/challenges/_meta/workshop-library-manager/meta.json @@ -20,24 +20,64 @@ "title": "Step 3" }, { - "id": "67116d7584d0b469b14579c1", + "id": "681dbe48ee5df6842385d735", "title": "Step 4" }, { - "id": "67116d7584d0b469b14579c2", + "id": "681dc1bbbf0d2e85ac499cf6", "title": "Step 5" }, { - "id": "67116d7584d0b469b14579c3", + "id": "681dc623b2b18887266777b1", "title": "Step 6" }, { - "id": "67116d7584d0b469b14579c4", + "id": "6822576638d15cff700f091d", "title": "Step 7" }, { - "id": "67190ce4fe18911edc2018d2", + "id": "6822595203b35c00b87c0524", "title": "Step 8" + }, + { + "id": "68225ea2f1aae301fa4df0f4", + "title": "Step 9" + }, + { + "id": "682264d807fe00058c1ea013", + "title": "Step 10" + }, + { + "id": "67116d7584d0b469b14579c2", + "title": "Step 11" + }, + { + "id": "6822694e3d34c807feeaba50", + "title": "Step 12" + }, + { + "id": "68226c92f138dd09cd5b9722", + "title": "Step 13" + }, + { + "id": "67116d7584d0b469b14579c3", + "title": "Step 14" + }, + { + "id": "682277e2d3a05f0c5cf34d19", + "title": "Step 15" + }, + { + "id": "6827deed7fc01f074c90fc0d", + "title": "Step 16" + }, + { + "id": "6827e10547fdd308bca1c73d", + "title": "Step 17" + }, + { + "id": "67116d7584d0b469b14579c4", + "title": "Step 18" } ], "helpCategory": "JavaScript", diff --git a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/67116d7584d0b469b14579c2.md b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/67116d7584d0b469b14579c2.md index f71084dea9e..e19ac33f998 100644 --- a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/67116d7584d0b469b14579c2.md +++ b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/67116d7584d0b469b14579c2.md @@ -1,40 +1,36 @@ --- id: 67116d7584d0b469b14579c2 -title: Step 5 +title: Step 11 challengeType: 1 -dashedName: step-5 +dashedName: step-11 --- # --description-- -To display the book summaries, you can use the `about` property of each book. +To get a list of book summaries, you can use the `about` property of each book. -Create a `getBookSummaries` function with a single parameter, accepting an array with book objects. The `getBookSummaries` function should return an array containing all the `about` property value of each book. +Create a `getBookSummaries` function with a single parameter, accepting an array with book objects. You can name the parameter whatever you like. + +The `getBookSummaries` function should return an array of strings representing the summary for each book. # --hints-- You should create a `getBookSummaries` function. ```js -assert.isFunction(getBookSummaries) +assert.isFunction(getBookSummaries); ``` Your `getBookSummaries` function should have one parameter. ```js -assert.lengthOf(getBookSummaries, 1) +assert.lengthOf(getBookSummaries, 1); ``` Your `getBookSummaries` function should return an array. ```js -assert.isArray(getBookSummaries(library)) -``` - -Your `getBookSummaries` function should use a higher order function. Ex. (`filter`, `map`, `reduce`). - -```js -assert.match(getBookSummaries.toString(), /filter|map|reduce|forEach/); +assert.isArray(getBookSummaries(library)); ``` Your `getBookSummaries` function should return an array with the same length as the array passed to it. @@ -150,16 +146,16 @@ const library = [ }, ]; -function displayBooks(catalog) { - let output = 'Books in the Library:\n'; +console.log("Books in the Library:\n"); - catalog.forEach((book) => { - output += `- ${book.title} by ${book.author} (${book.pages} pages)\n`; - }); - - return output; +function getBookInformation(catalog) { + return catalog.map(book => `${book.title} by ${book.author}`).join("\n"); } +console.log(getBookInformation(library)); + +console.log("\nList of book summaries:\n"); + --fcc-editable-region-- --fcc-editable-region-- diff --git a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/67116d7584d0b469b14579c3.md b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/67116d7584d0b469b14579c3.md index e7b0483e1ff..5b257aca39c 100644 --- a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/67116d7584d0b469b14579c3.md +++ b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/67116d7584d0b469b14579c3.md @@ -1,13 +1,34 @@ --- id: 67116d7584d0b469b14579c3 -title: Step 6 +title: Step 14 challengeType: 1 -dashedName: step-6 +dashedName: step-14 --- # --description-- -Another useful thing to do is to get the books by their author. +In earlier lectures, you learned how to work with the `filter()` method which is used to return a new array of filtered results. + +Here is an example: + +```js +const developers = [ + { name: "Alice", city: "New York", age: 30 }, + { name: "Bob", city: "San Francisco", age: 25 }, + { name: "Charlie", city: "New York", age: 35 }, + { name: "Diana", city: "Chicago", age: 28 } +]; + +const newYorkCityDevelopers = developers.filter(dev => dev.city === "New York"); + +console.log(newYorkCityDevelopers); +/* +[ + { name: "Alice", city: "New York", age: 30 }, + { name: "Charlie", city: "New York", age: 35 } +] +*/ +``` Create a `getBooksByAuthor` function with two parameters - an array with book objects and a string with the author. @@ -18,13 +39,13 @@ The function must return an array that contains the books by a particular author You should create a `getBooksByAuthor` function. ```js -assert.isFunction(getBooksByAuthor) +assert.isFunction(getBooksByAuthor); ``` Your `getBooksByAuthor` function should have two parameters. ```js -assert.lengthOf(getBooksByAuthor, 2) +assert.lengthOf(getBooksByAuthor, 2); ``` Your `getBooksByAuthor` function should return an array. @@ -33,12 +54,6 @@ Your `getBooksByAuthor` function should return an array. assert.isArray(getBooksByAuthor(library, '')); ``` -Your `getBooksByAuthor` function should use a higher order function. Ex. (`filter`, `map`, `reduce`). - -```js -assert.match(getBooksByAuthor.toString(), /filter|map|reduce|forEach/); -``` - Your `getBooksByAuthor` function should return the correct number of books for any of the authors. ```js @@ -139,20 +154,24 @@ const library = [ }, ]; -function displayBooks(catalog) { - let output = 'Books in the Library:\n'; +console.log("Books in the Library:\n"); - catalog.forEach((book) => { - output += `- ${book.title} by ${book.author} (${book.pages} pages)\n`; - }); - - return output; +function getBookInformation(catalog) { + return catalog.map(book => `${book.title} by ${book.author}`).join("\n"); } +console.log(getBookInformation(library)); + +console.log("\nList of book summaries:\n"); + function getBookSummaries(catalog) { - return catalog.map((book) => book.about); + return catalog.map((book) => book.about).join("\n"); } +console.log(getBookSummaries(library)); + +console.log("\nList of books by Arvid Kahl:\n"); + --fcc-editable-region-- --fcc-editable-region-- diff --git a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/67116d7584d0b469b14579c4.md b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/67116d7584d0b469b14579c4.md index 4032680ac33..bbbf3d8571e 100644 --- a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/67116d7584d0b469b14579c4.md +++ b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/67116d7584d0b469b14579c4.md @@ -1,33 +1,49 @@ --- id: 67116d7584d0b469b14579c4 -title: Step 7 +title: Step 18 challengeType: 1 -dashedName: step-7 +dashedName: step-18 --- # --description-- -Finally, create a `getTotalPages` function with a single parameter, accepting an array with book objects. The function should return the total number of pages in the books from the array passed to the function. +For the last step of the workshop, you will review how to work with the `reduce()` method. This method is used to process an array and condense it into a single value. + +Here is an example: + +```js +const numbers = [1, 2, 3, 4, 5]; +const sum = numbers.reduce((acc, curr) => acc + curr, 0); + +console.log(sum); // 15 +``` + +In the following example, the reducer function takes `acc` (which starts at 0, as specified by the second argument to `reduce`) and adds each number to it. This will return a sum of `15`. + +Create a `getTotalPages` function with a single parameter, accepting an array with book objects. The function should return the total number of pages in the books from the array passed to the function. + +Lastly, add a `console.log(getTotalPages(library))` below your `getTotalPages` function to see the result. + +With that, your library manager workshop is complete! # --hints-- - You should create a `getTotalPages` function. ```js -assert.isFunction(getTotalPages) +assert.isFunction(getTotalPages); ``` Your `getTotalPages` function should have one parameter. ```js -assert.lengthOf(getTotalPages, 1) +assert.lengthOf(getTotalPages, 1); ``` Your `getTotalPages` function should return a number. ```js -assert.isNumber(getTotalPages(library)) +assert.isNumber(getTotalPages(library)); ``` Your `getTotalPages` function should return the total number of pages in the books from the array passed to it. @@ -58,10 +74,10 @@ const _differentLibrary = [ assert.strictEqual(getTotalPages(_differentLibrary), 944); ``` -Your `getTotalPages` function should use a higher order function. Ex. (`filter`, `map`, `reduce`). +You should have a `console.log(getTotalPages(library))`. ```js -assert.match(getTotalPages.toString(), /filter|map|reduce|forEach/); +assert.match(code, /console\.log\(\s*getTotalPages\(\s*library\)\s*\);?/); ``` # --seed-- @@ -121,26 +137,127 @@ const library = [ }, ]; -function displayBooks(catalog) { - let output = 'Books in the Library:\n'; +console.log("Books in the Library:\n"); - catalog.forEach((book) => { - output += `- ${book.title} by ${book.author} (${book.pages} pages)\n`; - }); - - return output; +function getBookInformation(catalog) { + return catalog.map(book => `${book.title} by ${book.author}`).join("\n"); } +console.log(getBookInformation(library)); + +console.log("\nList of book summaries:\n"); + function getBookSummaries(catalog) { - return catalog.map((book) => book.about); + return catalog.map((book) => book.about).join("\n"); } +console.log(getBookSummaries(library)); + +console.log("\nList of books by Arvid Kahl:\n"); + function getBooksByAuthor(catalog, author) { return catalog.filter((book) => book.author === author); } +console.log(getBooksByAuthor(library, "Arvid Kahl")); + +console.log("\nList of books by James Clear:\n"); +console.log(getBooksByAuthor(library, "James Clear")); + +console.log("\nTotal number of pages for all library books:\n"); + --fcc-editable-region-- --fcc-editable-region-- ``` +# --solutions-- + +```js +const library = [ + { + title: 'Your Next Five Moves: Master the Art of Business Strategy', + author: 'Patrick Bet-David and Greg Dinkin', + about: 'A book on how to plan ahead', + pages: 320, + }, + { + title: 'Atomic Habits', + author: 'James Clear', + about: 'A practical book about discarding bad habits and building good ones', + pages: 320, + }, + { + title: 'Choose Your Enemies Wisely: Business Planning for the Audacious Few', + author: 'Patrick Bet-David', + about: + "A book that emphasizes the importance of identifying and understanding one's adversaries to succeed in the business world", + pages: 304, + }, + { + title: 'The Embedded Entrepreneur', + author: 'Arvid Kahl', + about: 'A book focusing on how to build an audience-driven business', + pages: 308, + }, + { + title: 'How to Be a Coffee Bean: 111 Life-Changing Ways to Create Positive Change', + author: 'Jon Gordon', + about: 'A book about effective ways to lead a coffee bean lifestyle', + pages: 256, + }, + { + title: 'The Creative Mindset: Mastering the Six Skills That Empower Innovation', + author: 'Jeff DeGraff and Staney DeGraff', + about: 'A book on how to develop creativity and innovation skills', + pages: 168, + }, + { + title: 'Rich Dad Poor Dad', + author: 'Robert Kiyosaki and Sharon Lechter', + about: 'A book about financial literacy, financial independence, and building wealth. ', + pages: 336, + }, + { + title: 'Zero to Sold', + author: 'Arvid Kahl', + about: 'A book on how to bootstrap a business', + pages: 500, + }, +]; + +console.log("Books in the Library:\n"); + +function getBookInformation(catalog) { + return catalog.map(book => `${book.title} by ${book.author}`).join("\n"); +} + +console.log(getBookInformation(library)); + +console.log("\nList of book summaries:\n"); + +function getBookSummaries(catalog) { + return catalog.map((book) => book.about).join("\n"); +} + +console.log(getBookSummaries(library)); + +console.log("\nList of books by Arvid Kahl:\n"); + +function getBooksByAuthor(catalog, author) { + return catalog.filter((book) => book.author === author); +} + +console.log(getBooksByAuthor(library, "Arvid Kahl")); + +console.log("\nList of books by James Clear:\n"); +console.log(getBooksByAuthor(library, "James Clear")); + +console.log("\nTotal number of pages for all library books:\n"); + +function getTotalPages(catalog) { + return catalog.reduce((acc, book) => acc + book.pages, 0); +} + +console.log(getTotalPages(library)); +``` diff --git a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/67190ce4fe18911edc2018d2.md b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/67190ce4fe18911edc2018d2.md deleted file mode 100644 index 785982bc8b4..00000000000 --- a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/67190ce4fe18911edc2018d2.md +++ /dev/null @@ -1,264 +0,0 @@ ---- -id: 67190ce4fe18911edc2018d2 -title: Step 8 -challengeType: 1 -dashedName: step-8 ---- - -# --description-- - -Now, you should test out the functions by calling them with the appropriate arguments. - -Create four new variables: `libraryBooks`, `bookSummaries`, `booksByArvidKahl`, and `totalPagesOfBooksInLibrary`. Set them all to the calling of `displayBooks()`, `getBookSummaries()`, `getBooksByAuthor()`, and `getTotalPages()` respectively with the appropriate parameters. - -Log all the variables to the console. - -With that, your library manager workshop is complete. - -# --hints-- - -You should create a `libraryBooks` variable. - -```js -assert.isNotNull(libraryBooks) -``` - -Your `libraryBooks` variable should be set to `displayBooks(library)`. - -```js -assert.equal(libraryBooks, displayBooks(library)); -``` - -You should log the `libraryBooks` variable to the console. - -```js -assert.match(code, /console\.log\(libraryBooks\);?/) -``` - -You should create a `bookSummaries` variable. - -```js -assert.isNotNull(bookSummaries) -``` - -Your `bookSummaries` variable should be set to `getBookSummaries(library)`. - -```js -assert.deepEqual(bookSummaries, getBookSummaries(library)); -``` - -You should log the `bookSummaries` variable to the console. - -```js -assert.match(code, /console\.log\(bookSummaries\);?/) -``` - -You should create a `booksByArvidKahl` variable. - -```js -assert.isNotNull(booksByArvidKahl) -``` - -Your `booksByArvidKahl` variable should be set to `getBooksByAuthor(library, 'Arvid Kahl')`. - -```js -assert.deepEqual(booksByArvidKahl, getBooksByAuthor(library, 'Arvid Kahl')); -``` - -You should log the `booksByArvidKahl` variable to the console. - -```js -assert.match(code, /console\.log\(booksByArvidKahl\);?/) -``` - -You should create a `totalPagesOfBooksInLibrary` variable. - -```js -assert.isNotNull(totalPagesOfBooksInLibrary) -``` - -Your `totalPagesOfBooksInLibrary` variable should be set to `getTotalPages(library)`. - -```js -assert.deepEqual(totalPagesOfBooksInLibrary, getTotalPages(library)); -``` - -You should log the `totalPagesOfBooksInLibrary` variable to the console. - -```js -assert.match(code, /console\.log\(totalPagesOfBooksInLibrary\);?/) -``` - -# --seed-- - -## --seed-contents-- - -```js -const library = [ - { - title: 'Your Next Five Moves: Master the Art of Business Strategy', - author: 'Patrick Bet-David and Greg Dinkin', - about: 'A book on how to plan ahead', - pages: 320, - }, - { - title: 'Atomic Habits', - author: 'James Clear', - about: 'A practical book about discarding bad habits and building good ones', - pages: 320, - }, - { - title: 'Choose Your Enemies Wisely: Business Planning for the Audacious Few', - author: 'Patrick Bet-David', - about: - "A book that emphasizes the importance of identifying and understanding one's adversaries to succeed in the business world", - pages: 304, - }, - { - title: 'The Embedded Entrepreneur', - author: 'Arvid Kahl', - about: 'A book focusing on how to build an audience-driven business', - pages: 308, - }, - { - title: 'How to Be a Coffee Bean: 111 Life-Changing Ways to Create Positive Change', - author: 'Jon Gordon', - about: 'A book about effective ways to lead a coffee bean lifestyle', - pages: 256, - }, - { - title: 'The Creative Mindset: Mastering the Six Skills That Empower Innovation', - author: 'Jeff DeGraff and Staney DeGraff', - about: 'A book on how to develop creativity and innovation skills', - pages: 168, - }, - { - title: 'Rich Dad Poor Dad', - author: 'Robert Kiyosaki and Sharon Lechter', - about: 'A book about financial literacy, financial independence, and building wealth. ', - pages: 336, - }, - { - title: 'Zero to Sold', - author: 'Arvid Kahl', - about: 'A book on how to bootstrap a business', - pages: 500, - }, -]; - -function displayBooks(catalog) { - let output = 'Books in the Library:\n'; - - catalog.forEach((book) => { - output += `- ${book.title} by ${book.author} (${book.pages} pages)\n`; - }); - - return output; -} - -function getBookSummaries(catalog) { - return catalog.map((book) => book.about); -} - -function getBooksByAuthor(catalog, author) { - return catalog.filter((book) => book.author === author); -} - -function getTotalPages(catalog) { - return catalog.reduce((acc, book) => acc + book.pages, 0); -} - ---fcc-editable-region-- - ---fcc-editable-region-- -``` - -# --solutions-- - -```js -const library = [ - { - title: 'Your Next Five Moves: Master the Art of Business Strategy', - author: 'Patrick Bet-David and Greg Dinkin', - about: 'A book on how to plan ahead', - pages: 320, - }, - { - title: 'Atomic Habits', - author: 'James Clear', - about: 'A practical book about discarding bad habits and building good ones', - pages: 320, - }, - { - title: 'Choose Your Enemies Wisely: Business Planning for the Audacious Few', - author: 'Patrick Bet-David', - about: - "A book that emphasizes the importance of identifying and understanding one's adversaries to succeed in the business world", - pages: 304, - }, - { - title: 'The Embedded Entrepreneur', - author: 'Arvid Kahl', - about: 'A book focusing on how to build an audience-driven business', - pages: 308, - }, - { - title: 'How to Be a Coffee Bean: 111 Life-Changing Ways to Create Positive Change', - author: 'Jon Gordon', - about: 'A book about effective ways to lead a coffee bean lifestyle', - pages: 256, - }, - { - title: 'The Creative Mindset: Mastering the Six Skills That Empower Innovation', - author: 'Jeff DeGraff and Staney DeGraff', - about: 'A book on how to develop creativity and innovation skills', - pages: 168, - }, - { - title: 'Rich Dad Poor Dad', - author: 'Robert Kiyosaki and Sharon Lechter', - about: 'A book about financial literacy, financial independence, and building wealth. ', - pages: 336, - }, - { - title: 'Zero to Sold', - author: 'Arvid Kahl', - about: 'A book on how to bootstrap a business', - pages: 500, - }, -]; - -function displayBooks(catalog) { - let output = 'Books in the Library:\n'; - - catalog.forEach((book) => { - output += `- ${book.title} by ${book.author} (${book.pages} pages)\n`; - }); - - return output; -} - -function getBookSummaries(catalog) { - return catalog.map((book) => book.about); -} - -function getBooksByAuthor(catalog, author) { - return catalog.filter((book) => book.author === author); -} - -function getTotalPages(catalog) { - return catalog.reduce((acc, book) => acc + book.pages, 0); -} - -const bookSummaries = getBookSummaries(library); -console.log(bookSummaries); - -const libraryBooks = displayBooks(library); -console.log(libraryBooks); - -const booksByArvidKahl = getBooksByAuthor(library, 'Arvid Kahl'); -console.log(booksByArvidKahl); - -const totalPagesOfBooksInLibrary = getTotalPages(library); -console.log(totalPagesOfBooksInLibrary); -``` diff --git a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/681dbe48ee5df6842385d735.md b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/681dbe48ee5df6842385d735.md new file mode 100644 index 00000000000..09f8ad15aed --- /dev/null +++ b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/681dbe48ee5df6842385d735.md @@ -0,0 +1,84 @@ +--- +id: 681dbe48ee5df6842385d735 +title: Step 4 +challengeType: 1 +dashedName: step-4 +--- + +# --description-- + +The rest of the objects representing the books have been filled in for you. + +Now would be a good time to start working on displaying the book information in the console. Over the next few steps, you will learn how to work with the `map()` method to achieve this goal. + +Begin by logging the message `"Books in the Library:\n"` to the console. The newline character is added here because there should be a space between this message and the list of books. + +# --hints-- + +You should log the message `"Books in the Library:\n"` to the console. + +```js +assert.match(code, /console\.log\(("|')Books\s+in\s+the\s+Library:\\n\1\);?/); +``` + +# --seed-- + +## --seed-contents-- + +```js +const library = [ + { + title: 'Your Next Five Moves: Master the Art of Business Strategy', + author: 'Patrick Bet-David and Greg Dinkin', + about: 'A book on how to plan ahead', + pages: 320, + }, + { + title: 'Atomic Habits', + author: 'James Clear', + about: 'A practical book about discarding bad habits and building good ones', + pages: 320, + }, + { + title: 'Choose Your Enemies Wisely: Business Planning for the Audacious Few', + author: 'Patrick Bet-David', + about: + "A book that emphasizes the importance of identifying and understanding one's adversaries to succeed in the business world", + pages: 304, + }, + { + title: 'The Embedded Entrepreneur', + author: 'Arvid Kahl', + about: 'A book focusing on how to build an audience-driven business', + pages: 308, + }, + { + title: 'How to Be a Coffee Bean: 111 Life-Changing Ways to Create Positive Change', + author: 'Jon Gordon', + about: 'A book about effective ways to lead a coffee bean lifestyle', + pages: 256, + }, + { + title: 'The Creative Mindset: Mastering the Six Skills That Empower Innovation', + author: 'Jeff DeGraff and Staney DeGraff', + about: 'A book on how to develop creativity and innovation skills', + pages: 168, + }, + { + title: 'Rich Dad Poor Dad', + author: 'Robert Kiyosaki and Sharon Lechter', + about: 'A book about financial literacy, financial independence, and building wealth. ', + pages: 336, + }, + { + title: 'Zero to Sold', + author: 'Arvid Kahl', + about: 'A book on how to bootstrap a business', + pages: 500, + }, +]; + +--fcc-editable-region-- + +--fcc-editable-region-- +``` diff --git a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/681dc1bbbf0d2e85ac499cf6.md b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/681dc1bbbf0d2e85ac499cf6.md new file mode 100644 index 00000000000..a9332fbbdfe --- /dev/null +++ b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/681dc1bbbf0d2e85ac499cf6.md @@ -0,0 +1,88 @@ +--- +id: 681dc1bbbf0d2e85ac499cf6 +title: Step 5 +challengeType: 1 +dashedName: step-5 +--- + +# --description-- + +Next, create a function called `getBookInformation` with one parameter. This parameter will represent the array of books when the function is called. You can name this parameter whatever you like. + +# --hints-- + +You should create a `getBookInformation` function. + +```js +assert.isFunction(getBookInformation); +``` + +Your `getBookInformation` function should have one parameter. + +```js +assert.lengthOf(getBookInformation, 1) +``` + +# --seed-- + +## --seed-contents-- + +```js +const library = [ + { + title: 'Your Next Five Moves: Master the Art of Business Strategy', + author: 'Patrick Bet-David and Greg Dinkin', + about: 'A book on how to plan ahead', + pages: 320, + }, + { + title: 'Atomic Habits', + author: 'James Clear', + about: 'A practical book about discarding bad habits and building good ones', + pages: 320, + }, + { + title: 'Choose Your Enemies Wisely: Business Planning for the Audacious Few', + author: 'Patrick Bet-David', + about: + "A book that emphasizes the importance of identifying and understanding one's adversaries to succeed in the business world", + pages: 304, + }, + { + title: 'The Embedded Entrepreneur', + author: 'Arvid Kahl', + about: 'A book focusing on how to build an audience-driven business', + pages: 308, + }, + { + title: 'How to Be a Coffee Bean: 111 Life-Changing Ways to Create Positive Change', + author: 'Jon Gordon', + about: 'A book about effective ways to lead a coffee bean lifestyle', + pages: 256, + }, + { + title: 'The Creative Mindset: Mastering the Six Skills That Empower Innovation', + author: 'Jeff DeGraff and Staney DeGraff', + about: 'A book on how to develop creativity and innovation skills', + pages: 168, + }, + { + title: 'Rich Dad Poor Dad', + author: 'Robert Kiyosaki and Sharon Lechter', + about: 'A book about financial literacy, financial independence, and building wealth. ', + pages: 336, + }, + { + title: 'Zero to Sold', + author: 'Arvid Kahl', + about: 'A book on how to bootstrap a business', + pages: 500, + }, +]; + +console.log("Books in the Library:\n"); + +--fcc-editable-region-- + +--fcc-editable-region-- +``` diff --git a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/681dc623b2b18887266777b1.md b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/681dc623b2b18887266777b1.md new file mode 100644 index 00000000000..f4e4dae02cf --- /dev/null +++ b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/681dc623b2b18887266777b1.md @@ -0,0 +1,129 @@ +--- +id: 681dc623b2b18887266777b1 +title: Step 6 +challengeType: 1 +dashedName: step-6 +--- + +# --description-- + +In prior lectures, you learned about the `map()` method which creates a new array by applying a given function to each element of the original array. + +Here is an example: + +```js +const developers = [ + { name: "Alice", city: "New York", title: "Frontend Developer" }, + { name: "Bob", city: "San Francisco", title: "Backend Developer" } +]; + +console.log(developers.map(dev => dev.name)); +// ["Alice", "Bob"] +``` + +`dev` in this example represents each object in the `developers` array. Then, dot notation is used to get the `name` from the object. Lastly, the result will be a new array of names. + +Inside the `getBookInformation` function, use the `map()` method on the `catalog` parameter to return a new array of just book titles. Refer to the example if you need help. + +# --hints-- + +Your `getBookInformation` function should return an array. + +```js +assert.isArray(getBookInformation(library)); +``` + +Your `getBookInformation` function should return an array of strings which represents the book titles. + +```js +const testLibrary = [ + { + title: "Title A", + author: "Author A", + about: "About A", + pages: 320, + }, + { + title: "Title B", + author: "Author B", + about: "About B", + pages: 320, + }, + { + title: "Title C", + author: "Author C", + about: "About C", + pages: 304, + }, +]; + +const expected = ["Title A", "Title B", "Title C"]; + +assert.deepEqual(getBookInformation(testLibrary), expected); +``` + +# --seed-- + +## --seed-contents-- + +```js +const library = [ + { + title: 'Your Next Five Moves: Master the Art of Business Strategy', + author: 'Patrick Bet-David and Greg Dinkin', + about: 'A book on how to plan ahead', + pages: 320, + }, + { + title: 'Atomic Habits', + author: 'James Clear', + about: 'A practical book about discarding bad habits and building good ones', + pages: 320, + }, + { + title: 'Choose Your Enemies Wisely: Business Planning for the Audacious Few', + author: 'Patrick Bet-David', + about: + "A book that emphasizes the importance of identifying and understanding one's adversaries to succeed in the business world", + pages: 304, + }, + { + title: 'The Embedded Entrepreneur', + author: 'Arvid Kahl', + about: 'A book focusing on how to build an audience-driven business', + pages: 308, + }, + { + title: 'How to Be a Coffee Bean: 111 Life-Changing Ways to Create Positive Change', + author: 'Jon Gordon', + about: 'A book about effective ways to lead a coffee bean lifestyle', + pages: 256, + }, + { + title: 'The Creative Mindset: Mastering the Six Skills That Empower Innovation', + author: 'Jeff DeGraff and Staney DeGraff', + about: 'A book on how to develop creativity and innovation skills', + pages: 168, + }, + { + title: 'Rich Dad Poor Dad', + author: 'Robert Kiyosaki and Sharon Lechter', + about: 'A book about financial literacy, financial independence, and building wealth. ', + pages: 336, + }, + { + title: 'Zero to Sold', + author: 'Arvid Kahl', + about: 'A book on how to bootstrap a business', + pages: 500, + }, +]; + +console.log("Books in the Library:\n"); + +--fcc-editable-region-- +function getBookInformation(catalog) { + +} +--fcc-editable-region-- +``` diff --git a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/6822576638d15cff700f091d.md b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/6822576638d15cff700f091d.md new file mode 100644 index 00000000000..b301997c45b --- /dev/null +++ b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/6822576638d15cff700f091d.md @@ -0,0 +1,90 @@ +--- +id: 6822576638d15cff700f091d +title: Step 7 +challengeType: 1 +dashedName: step-7 +--- + +# --description-- + +Now it is time to see what the result will look like in the console. + +Below your `getBookInformation` function, add a `console.log()` and pass in a `getBookInformation()` function call with `library` for the argument. + +When done correctly, you should see an array of book titles in the console. + +# --hints-- + +You should have `console.log(getBookInformation(library));` in your code. + +```js +assert.match(code, /console\.log\(\s*getBookInformation\(\s*library\s*\)\);?/gi); +``` + +# --seed-- + +## --seed-contents-- + +```js +const library = [ + { + title: 'Your Next Five Moves: Master the Art of Business Strategy', + author: 'Patrick Bet-David and Greg Dinkin', + about: 'A book on how to plan ahead', + pages: 320, + }, + { + title: 'Atomic Habits', + author: 'James Clear', + about: 'A practical book about discarding bad habits and building good ones', + pages: 320, + }, + { + title: 'Choose Your Enemies Wisely: Business Planning for the Audacious Few', + author: 'Patrick Bet-David', + about: + "A book that emphasizes the importance of identifying and understanding one's adversaries to succeed in the business world", + pages: 304, + }, + { + title: 'The Embedded Entrepreneur', + author: 'Arvid Kahl', + about: 'A book focusing on how to build an audience-driven business', + pages: 308, + }, + { + title: 'How to Be a Coffee Bean: 111 Life-Changing Ways to Create Positive Change', + author: 'Jon Gordon', + about: 'A book about effective ways to lead a coffee bean lifestyle', + pages: 256, + }, + { + title: 'The Creative Mindset: Mastering the Six Skills That Empower Innovation', + author: 'Jeff DeGraff and Staney DeGraff', + about: 'A book on how to develop creativity and innovation skills', + pages: 168, + }, + { + title: 'Rich Dad Poor Dad', + author: 'Robert Kiyosaki and Sharon Lechter', + about: 'A book about financial literacy, financial independence, and building wealth. ', + pages: 336, + }, + { + title: 'Zero to Sold', + author: 'Arvid Kahl', + about: 'A book on how to bootstrap a business', + pages: 500, + }, +]; + +console.log("Books in the Library:\n"); + +function getBookInformation(catalog) { + return catalog.map(book => book.title); +} + +--fcc-editable-region-- + +--fcc-editable-region-- +``` diff --git a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/6822595203b35c00b87c0524.md b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/6822595203b35c00b87c0524.md new file mode 100644 index 00000000000..d1a656ebfff --- /dev/null +++ b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/6822595203b35c00b87c0524.md @@ -0,0 +1,132 @@ +--- +id: 6822595203b35c00b87c0524 +title: Step 8 +challengeType: 1 +dashedName: step-8 +--- + +# --description-- + +The array of book titles is nice, but it would be nice to display the `title` and `author` for each book like this: + +```js +[ + "Your Next Five Moves: Master the Art of Business Strategy by Patrick Bet-David and Greg Dinkin", + "Atomic Habits by James Clear", + "Choose Your Enemies Wisely: Business Planning for the Audacious Few by Patrick Bet-David", + ... +] +``` + +Update your use of the `map()` method to instead return an array of strings in this format: `TITLE by AUTHOR`. + +You will need to use either template literals or string concatenation with the `+` operator to achieve this result. + +# --hints-- + +Your `getBookInformation` function should return an array. + +```js +assert.isArray(getBookInformation(library)); +``` + +Your `getBookInformation` function should return an array of strings with the `title` and `author` for each book. + +```js +const testLibrary = [ + { + title: "Title A", + author: "Author A", + about: "About A", + pages: 320, + }, + { + title: "Title B", + author: "Author B", + about: "About B", + pages: 320, + }, + { + title: "Title C", + author: "Author C", + about: "About C", + pages: 304, + }, +]; + +const expected = [ + "Title A by Author A", + "Title B by Author B", + "Title C by Author C" +]; + +assert.deepEqual(getBookInformation(testLibrary), expected); +``` + +# --seed-- + +## --seed-contents-- + +```js +const library = [ + { + title: 'Your Next Five Moves: Master the Art of Business Strategy', + author: 'Patrick Bet-David and Greg Dinkin', + about: 'A book on how to plan ahead', + pages: 320, + }, + { + title: 'Atomic Habits', + author: 'James Clear', + about: 'A practical book about discarding bad habits and building good ones', + pages: 320, + }, + { + title: 'Choose Your Enemies Wisely: Business Planning for the Audacious Few', + author: 'Patrick Bet-David', + about: + "A book that emphasizes the importance of identifying and understanding one's adversaries to succeed in the business world", + pages: 304, + }, + { + title: 'The Embedded Entrepreneur', + author: 'Arvid Kahl', + about: 'A book focusing on how to build an audience-driven business', + pages: 308, + }, + { + title: 'How to Be a Coffee Bean: 111 Life-Changing Ways to Create Positive Change', + author: 'Jon Gordon', + about: 'A book about effective ways to lead a coffee bean lifestyle', + pages: 256, + }, + { + title: 'The Creative Mindset: Mastering the Six Skills That Empower Innovation', + author: 'Jeff DeGraff and Staney DeGraff', + about: 'A book on how to develop creativity and innovation skills', + pages: 168, + }, + { + title: 'Rich Dad Poor Dad', + author: 'Robert Kiyosaki and Sharon Lechter', + about: 'A book about financial literacy, financial independence, and building wealth. ', + pages: 336, + }, + { + title: 'Zero to Sold', + author: 'Arvid Kahl', + about: 'A book on how to bootstrap a business', + pages: 500, + }, +]; + +console.log("Books in the Library:\n"); + +--fcc-editable-region-- +function getBookInformation(catalog) { + return catalog.map(book => book.title); +} +--fcc-editable-region-- + +console.log(getBookInformation(library)); +``` diff --git a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/67116d7584d0b469b14579c1.md b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/68225ea2f1aae301fa4df0f4.md similarity index 51% rename from curriculum/challenges/english/25-front-end-development/workshop-library-manager/67116d7584d0b469b14579c1.md rename to curriculum/challenges/english/25-front-end-development/workshop-library-manager/68225ea2f1aae301fa4df0f4.md index dcf8853f9e7..39c4ec3e393 100644 --- a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/67116d7584d0b469b14579c1.md +++ b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/68225ea2f1aae301fa4df0f4.md @@ -1,80 +1,69 @@ --- -id: 67116d7584d0b469b14579c1 -title: Step 4 +id: 68225ea2f1aae301fa4df0f4 +title: Step 9 challengeType: 1 -dashedName: step-4 +dashedName: step-9 --- # --description-- -The rest of the objects representing the books have been filled in for you. You can take a look at them. +While the array of results is working, the final desired result should be a string listing all of the books with a title and author. -Now, you should start working on getting several common parts of the books. +This is where the `join()` method comes in. In earlier lectures, you learned that the `join()` method is used to return a new string of all of the array elements concatenated into a single string, with a specified separator between each element. -Start by displaying all the books. Create a `displayBooks` function with a parameter accepting an array with book objects. The function should return a string that contains the `title`, `author`, and `pages` of all the books in the array passed to function. +Here is a refresher: + +```js +const developers = ["Naomi", "Tom", "Jessica"]; + +const teamList = developers.join("\n"); +console.log(teamList); +// Naomi +// Tom +// Jessica +``` + +The separator in this case is the `\n` which represents the newline character. + +Chain the `join()` method with a `\n` for the separator to the `map()`. Now you should see a string in the console instead of the array of results. # --hints-- -You should create a `displayBooks` function. +Your `getBookInformation` function should return a string. ```js -assert.isFunction(displayBooks) +assert.isString(getBookInformation(library)); ``` -Your `displayBooks` function should have one parameter. +Your `getBookInformation` function should return a single string representing the final result. ```js -assert.lengthOf(displayBooks, 1) -``` - -Your `displayBooks` function should use a higher order function. Ex. (`filter`, `map`, `reduce`) - -```js -assert.match(displayBooks.toString(), /filter|map|reduce|forEach/); -``` - -Your `displayBooks` function should return a string. - -```js -assert.isString(displayBooks(library)) -``` - -Your `displayBooks` function should return each book title, author and number of pages, for all books in the array passed to it. - -```js -const libraryBooks = displayBooks(library); -library.forEach((book) => { - assert.include(libraryBooks, book.title); - assert.include(libraryBooks, book.author); - assert.include(libraryBooks, book.pages.toString()); -}); - -const _differentLibrary = [ +const testLibrary = [ { - title: 'Title A', - author: 'Author A', - about: 'About A', + title: "Title A", + author: "Author A", + about: "About A", pages: 320, }, { - title: 'Title B', - author: 'Author B', - about: 'About B', + title: "Title B", + author: "Author B", + about: "About B", pages: 320, }, { - title: 'Title C', - author: 'Author C', - about: 'About C', + title: "Title C", + author: "Author C", + about: "About C", pages: 304, }, ]; -const _differentBooks = displayBooks(_differentLibrary); -_differentLibrary.forEach((book) => { - assert.include(_differentBooks, book.title); - assert.include(_differentBooks, book.author); - assert.include(_differentBooks, book.pages.toString()); -}); + +const expected = `Title A by Author A +Title B by Author B +Title C by Author C`; + +assert.strictEqual(getBookInformation(testLibrary), expected); ``` # --seed-- @@ -134,7 +123,13 @@ const library = [ }, ]; +console.log("Books in the Library:\n"); + --fcc-editable-region-- - +function getBookInformation(catalog) { + return catalog.map(book => `${book.title} by ${book.author}`) +} --fcc-editable-region-- + +console.log(getBookInformation(library)); ``` diff --git a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/682264d807fe00058c1ea013.md b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/682264d807fe00058c1ea013.md new file mode 100644 index 00000000000..1a8452978be --- /dev/null +++ b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/682264d807fe00058c1ea013.md @@ -0,0 +1,90 @@ +--- +id: 682264d807fe00058c1ea013 +title: Step 10 +challengeType: 1 +dashedName: step-10 +--- + +# --description-- + +For the next part of the workshop, you will focus on displaying a list of book summaries to the console. + +Begin by logging the message `"\nList of book summaries:\n"` to the console. The newline character is added here because there should be a space before and after the message here. + +# --hints-- + +You should log the message `"\nList of book summaries:\n"` to the console. + +```js +assert.match(code, /console\.log\(("|')\\nList\s+of\s+book\s+summaries:\\n\1\);?/); +``` + +# --seed-- + +## --seed-contents-- + +```js +const library = [ + { + title: 'Your Next Five Moves: Master the Art of Business Strategy', + author: 'Patrick Bet-David and Greg Dinkin', + about: 'A book on how to plan ahead', + pages: 320, + }, + { + title: 'Atomic Habits', + author: 'James Clear', + about: 'A practical book about discarding bad habits and building good ones', + pages: 320, + }, + { + title: 'Choose Your Enemies Wisely: Business Planning for the Audacious Few', + author: 'Patrick Bet-David', + about: + "A book that emphasizes the importance of identifying and understanding one's adversaries to succeed in the business world", + pages: 304, + }, + { + title: 'The Embedded Entrepreneur', + author: 'Arvid Kahl', + about: 'A book focusing on how to build an audience-driven business', + pages: 308, + }, + { + title: 'How to Be a Coffee Bean: 111 Life-Changing Ways to Create Positive Change', + author: 'Jon Gordon', + about: 'A book about effective ways to lead a coffee bean lifestyle', + pages: 256, + }, + { + title: 'The Creative Mindset: Mastering the Six Skills That Empower Innovation', + author: 'Jeff DeGraff and Staney DeGraff', + about: 'A book on how to develop creativity and innovation skills', + pages: 168, + }, + { + title: 'Rich Dad Poor Dad', + author: 'Robert Kiyosaki and Sharon Lechter', + about: 'A book about financial literacy, financial independence, and building wealth. ', + pages: 336, + }, + { + title: 'Zero to Sold', + author: 'Arvid Kahl', + about: 'A book on how to bootstrap a business', + pages: 500, + }, +]; + +console.log("Books in the Library:\n"); + +function getBookInformation(catalog) { + return catalog.map(book => `${book.title} by ${book.author}`).join("\n"); +} + +console.log(getBookInformation(library)); + +--fcc-editable-region-- + +--fcc-editable-region-- +``` diff --git a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/6822694e3d34c807feeaba50.md b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/6822694e3d34c807feeaba50.md new file mode 100644 index 00000000000..abd51beaca7 --- /dev/null +++ b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/6822694e3d34c807feeaba50.md @@ -0,0 +1,136 @@ +--- +id: 6822694e3d34c807feeaba50 +title: Step 12 +challengeType: 1 +dashedName: step-12 +--- + +# --description-- + +Just like in a prior step, the desired result would look nicer as a string instead of an array. + +Chain the `join()` method to your existing `map()` method and pass in `"\n"` for the separator to the `join()`. + +Then, below your `getBookSummaries` function, add a `console.log()`. The `console` statement should call the `getBookSummaries` function with `library` for the argument. + +Now, you should see a string for the result in the console. + +# --hints-- + +Your `getBookSummaries` function should return a string. + +```js +assert.isString(getBookSummaries(library)); +``` + +Your `getBookSummaries` function should return a single string representing the final result. + +```js +const testLibrary = [ + { + title: "Title A", + author: "Author A", + about: "About A", + pages: 320, + }, + { + title: "Title B", + author: "Author B", + about: "About B", + pages: 320, + }, + { + title: "Title C", + author: "Author C", + about: "About C", + pages: 304, + }, +]; + +const expected = `About A +About B +About C`; + +assert.strictEqual(getBookSummaries(testLibrary), expected); +``` + +You should have a `console.log(getBookSummaries(library));` in your code. + +```js +assert.match(code, /console\.log\(\s*getBookSummaries\(\s*library\s*\)\);?/gi); +``` + +# --seed-- + +## --seed-contents-- + +```js +const library = [ + { + title: 'Your Next Five Moves: Master the Art of Business Strategy', + author: 'Patrick Bet-David and Greg Dinkin', + about: 'A book on how to plan ahead', + pages: 320, + }, + { + title: 'Atomic Habits', + author: 'James Clear', + about: 'A practical book about discarding bad habits and building good ones', + pages: 320, + }, + { + title: 'Choose Your Enemies Wisely: Business Planning for the Audacious Few', + author: 'Patrick Bet-David', + about: + "A book that emphasizes the importance of identifying and understanding one's adversaries to succeed in the business world", + pages: 304, + }, + { + title: 'The Embedded Entrepreneur', + author: 'Arvid Kahl', + about: 'A book focusing on how to build an audience-driven business', + pages: 308, + }, + { + title: 'How to Be a Coffee Bean: 111 Life-Changing Ways to Create Positive Change', + author: 'Jon Gordon', + about: 'A book about effective ways to lead a coffee bean lifestyle', + pages: 256, + }, + { + title: 'The Creative Mindset: Mastering the Six Skills That Empower Innovation', + author: 'Jeff DeGraff and Staney DeGraff', + about: 'A book on how to develop creativity and innovation skills', + pages: 168, + }, + { + title: 'Rich Dad Poor Dad', + author: 'Robert Kiyosaki and Sharon Lechter', + about: 'A book about financial literacy, financial independence, and building wealth. ', + pages: 336, + }, + { + title: 'Zero to Sold', + author: 'Arvid Kahl', + about: 'A book on how to bootstrap a business', + pages: 500, + }, +]; + +console.log("Books in the Library:\n"); + +function getBookInformation(catalog) { + return catalog.map(book => `${book.title} by ${book.author}`).join("\n"); +} + +console.log(getBookInformation(library)); + +console.log("\nList of book summaries:\n"); + +--fcc-editable-region-- +function getBookSummaries(catalog) { + return catalog.map((book) => book.about) +} + +--fcc-editable-region-- +``` diff --git a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/68226c92f138dd09cd5b9722.md b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/68226c92f138dd09cd5b9722.md new file mode 100644 index 00000000000..468c6a8edc2 --- /dev/null +++ b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/68226c92f138dd09cd5b9722.md @@ -0,0 +1,98 @@ +--- +id: 68226c92f138dd09cd5b9722 +title: Step 13 +challengeType: 1 +dashedName: step-13 +--- + +# --description-- + +For this next part of the workshop, you are going to learn how to display a list of books by author. + +Begin by logging the message `"\nList of books by Arvid Kahl:\n"` to the console. + +# --hints-- + +You should log the message `"\nList of books by Arvid Kahl:\n"` to the console. + +```js +assert.match(code, /console\.log\(("|')\\nList\s+of\s+books\s+by\s+Arvid\s+Kahl:\\n\1\);?/); +``` + +# --seed-- + +## --seed-contents-- + +```js +const library = [ + { + title: 'Your Next Five Moves: Master the Art of Business Strategy', + author: 'Patrick Bet-David and Greg Dinkin', + about: 'A book on how to plan ahead', + pages: 320, + }, + { + title: 'Atomic Habits', + author: 'James Clear', + about: 'A practical book about discarding bad habits and building good ones', + pages: 320, + }, + { + title: 'Choose Your Enemies Wisely: Business Planning for the Audacious Few', + author: 'Patrick Bet-David', + about: + "A book that emphasizes the importance of identifying and understanding one's adversaries to succeed in the business world", + pages: 304, + }, + { + title: 'The Embedded Entrepreneur', + author: 'Arvid Kahl', + about: 'A book focusing on how to build an audience-driven business', + pages: 308, + }, + { + title: 'How to Be a Coffee Bean: 111 Life-Changing Ways to Create Positive Change', + author: 'Jon Gordon', + about: 'A book about effective ways to lead a coffee bean lifestyle', + pages: 256, + }, + { + title: 'The Creative Mindset: Mastering the Six Skills That Empower Innovation', + author: 'Jeff DeGraff and Staney DeGraff', + about: 'A book on how to develop creativity and innovation skills', + pages: 168, + }, + { + title: 'Rich Dad Poor Dad', + author: 'Robert Kiyosaki and Sharon Lechter', + about: 'A book about financial literacy, financial independence, and building wealth. ', + pages: 336, + }, + { + title: 'Zero to Sold', + author: 'Arvid Kahl', + about: 'A book on how to bootstrap a business', + pages: 500, + }, +]; + +console.log("Books in the Library:\n"); + +function getBookInformation(catalog) { + return catalog.map(book => `${book.title} by ${book.author}`).join("\n"); +} + +console.log(getBookInformation(library)); + +console.log("\nList of book summaries:\n"); + +function getBookSummaries(catalog) { + return catalog.map((book) => book.about).join("\n"); +} + +console.log(getBookSummaries(library)); + +--fcc-editable-region-- + +--fcc-editable-region-- +``` diff --git a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/682277e2d3a05f0c5cf34d19.md b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/682277e2d3a05f0c5cf34d19.md new file mode 100644 index 00000000000..8e1d5dd7525 --- /dev/null +++ b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/682277e2d3a05f0c5cf34d19.md @@ -0,0 +1,108 @@ +--- +id: 682277e2d3a05f0c5cf34d19 +title: Step 15 +challengeType: 1 +dashedName: step-15 +--- + +# --description-- + +Now, it is time to test out your function. + +Add a `console.log()` below your `getBooksByAuthor()` function. + +Inside the `console.log()`, call the `getBooksByAuthor()` function with `library` and `"Arvid Kahl"` for arguments. + +Now, you should see all of the books for that particular author in the console. + +# --hints-- + +You should have a `console.log(getBooksByAuthor(library, "Arvid Kahl"))`. + +```js +assert.match(code, /console\.log\(\s*getBooksByAuthor\s*\(\s*library\s*,\s*(['"])\s*Arvid\s+Kahl\s*\1\s*\)\s*\)/); +``` + +# --seed-- + +## --seed-contents-- + +```js +const library = [ + { + title: 'Your Next Five Moves: Master the Art of Business Strategy', + author: 'Patrick Bet-David and Greg Dinkin', + about: 'A book on how to plan ahead', + pages: 320, + }, + { + title: 'Atomic Habits', + author: 'James Clear', + about: 'A practical book about discarding bad habits and building good ones', + pages: 320, + }, + { + title: 'Choose Your Enemies Wisely: Business Planning for the Audacious Few', + author: 'Patrick Bet-David', + about: + "A book that emphasizes the importance of identifying and understanding one's adversaries to succeed in the business world", + pages: 304, + }, + { + title: 'The Embedded Entrepreneur', + author: 'Arvid Kahl', + about: 'A book focusing on how to build an audience-driven business', + pages: 308, + }, + { + title: 'How to Be a Coffee Bean: 111 Life-Changing Ways to Create Positive Change', + author: 'Jon Gordon', + about: 'A book about effective ways to lead a coffee bean lifestyle', + pages: 256, + }, + { + title: 'The Creative Mindset: Mastering the Six Skills That Empower Innovation', + author: 'Jeff DeGraff and Staney DeGraff', + about: 'A book on how to develop creativity and innovation skills', + pages: 168, + }, + { + title: 'Rich Dad Poor Dad', + author: 'Robert Kiyosaki and Sharon Lechter', + about: 'A book about financial literacy, financial independence, and building wealth. ', + pages: 336, + }, + { + title: 'Zero to Sold', + author: 'Arvid Kahl', + about: 'A book on how to bootstrap a business', + pages: 500, + }, +]; + +console.log("Books in the Library:\n"); + +function getBookInformation(catalog) { + return catalog.map(book => `${book.title} by ${book.author}`).join("\n"); +} + +console.log(getBookInformation(library)); + +console.log("\nList of book summaries:\n"); + +function getBookSummaries(catalog) { + return catalog.map((book) => book.about).join("\n"); +} + +console.log(getBookSummaries(library)); + +console.log("\nList of books by Arvid Kahl:\n"); + +function getBooksByAuthor(catalog, author) { + return catalog.filter((book) => book.author === author); +} + +--fcc-editable-region-- + +--fcc-editable-region-- +``` diff --git a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/6827deed7fc01f074c90fc0d.md b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/6827deed7fc01f074c90fc0d.md new file mode 100644 index 00000000000..fb8b618109f --- /dev/null +++ b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/6827deed7fc01f074c90fc0d.md @@ -0,0 +1,116 @@ +--- +id: 6827deed7fc01f074c90fc0d +title: Step 16 +challengeType: 1 +dashedName: step-16 +--- + +# --description-- + +It would be nice to test our your `getBooksByAuthor` function with another author. + +Begin by logging the message `"\nList of books by James Clear:\n"` to the console. + +Below that `console.log()`, add another `console.log()`. Inside that `console.log()`, call the `getBooksByAuthor()` function with `library` and `"James Clear"` for arguments. + +Now, you should see all of the books for that particular author in the console. + +# --hints-- + +You should log the message `"\nList of books by James Clear:\n"` to the console. + +```js +assert.match(code, /console\.log\(("|')\\nList\s+of\s+books\s+by\s+James\s+Clear:\\n\1\);?/); +``` + +You should have a `console.log(getBooksByAuthor(library, "James Clear"))`. + +```js +assert.match(code, /console\.log\(\s*getBooksByAuthor\s*\(\s*library\s*,\s*(['"])\s*James\s+Clear\s*\1\s*\)\s*\)/); +``` + +# --seed-- + +## --seed-contents-- + +```js +const library = [ + { + title: 'Your Next Five Moves: Master the Art of Business Strategy', + author: 'Patrick Bet-David and Greg Dinkin', + about: 'A book on how to plan ahead', + pages: 320, + }, + { + title: 'Atomic Habits', + author: 'James Clear', + about: 'A practical book about discarding bad habits and building good ones', + pages: 320, + }, + { + title: 'Choose Your Enemies Wisely: Business Planning for the Audacious Few', + author: 'Patrick Bet-David', + about: + "A book that emphasizes the importance of identifying and understanding one's adversaries to succeed in the business world", + pages: 304, + }, + { + title: 'The Embedded Entrepreneur', + author: 'Arvid Kahl', + about: 'A book focusing on how to build an audience-driven business', + pages: 308, + }, + { + title: 'How to Be a Coffee Bean: 111 Life-Changing Ways to Create Positive Change', + author: 'Jon Gordon', + about: 'A book about effective ways to lead a coffee bean lifestyle', + pages: 256, + }, + { + title: 'The Creative Mindset: Mastering the Six Skills That Empower Innovation', + author: 'Jeff DeGraff and Staney DeGraff', + about: 'A book on how to develop creativity and innovation skills', + pages: 168, + }, + { + title: 'Rich Dad Poor Dad', + author: 'Robert Kiyosaki and Sharon Lechter', + about: 'A book about financial literacy, financial independence, and building wealth. ', + pages: 336, + }, + { + title: 'Zero to Sold', + author: 'Arvid Kahl', + about: 'A book on how to bootstrap a business', + pages: 500, + }, +]; + +console.log("Books in the Library:\n"); + +function getBookInformation(catalog) { + return catalog.map(book => `${book.title} by ${book.author}`).join("\n"); +} + +console.log(getBookInformation(library)); + +console.log("\nList of book summaries:\n"); + +function getBookSummaries(catalog) { + return catalog.map((book) => book.about).join("\n"); +} + +console.log(getBookSummaries(library)); + +console.log("\nList of books by Arvid Kahl:\n"); + +function getBooksByAuthor(catalog, author) { + return catalog.filter((book) => book.author === author); +} + +console.log(getBooksByAuthor(library, "Arvid Kahl")); + +--fcc-editable-region-- + +--fcc-editable-region-- +``` diff --git a/curriculum/challenges/english/25-front-end-development/workshop-library-manager/6827e10547fdd308bca1c73d.md b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/6827e10547fdd308bca1c73d.md new file mode 100644 index 00000000000..fc9f3ce6ac8 --- /dev/null +++ b/curriculum/challenges/english/25-front-end-development/workshop-library-manager/6827e10547fdd308bca1c73d.md @@ -0,0 +1,109 @@ +--- +id: 6827e10547fdd308bca1c73d +title: Step 17 +challengeType: 1 +dashedName: step-17 +--- + +# --description-- + +For the last part of the workshop, you will learn how to get the total number of pages for all of the books in the library. + +Start by logging to the message `"\nTotal number of pages for all library books:\n"` to the console. + +# --hints-- + +You should log the message `"\nTotal number of pages for all library books:\n"` to the console. + +```js +assert.match(code, /console\.log\((["'])\\nTotal\s+number\s+of\s+pages\s+for\s+all\s+library\s+books:\\n\1\);?/); +``` + +# --seed-- + +## --seed-contents-- + +```js +const library = [ + { + title: 'Your Next Five Moves: Master the Art of Business Strategy', + author: 'Patrick Bet-David and Greg Dinkin', + about: 'A book on how to plan ahead', + pages: 320, + }, + { + title: 'Atomic Habits', + author: 'James Clear', + about: 'A practical book about discarding bad habits and building good ones', + pages: 320, + }, + { + title: 'Choose Your Enemies Wisely: Business Planning for the Audacious Few', + author: 'Patrick Bet-David', + about: + "A book that emphasizes the importance of identifying and understanding one's adversaries to succeed in the business world", + pages: 304, + }, + { + title: 'The Embedded Entrepreneur', + author: 'Arvid Kahl', + about: 'A book focusing on how to build an audience-driven business', + pages: 308, + }, + { + title: 'How to Be a Coffee Bean: 111 Life-Changing Ways to Create Positive Change', + author: 'Jon Gordon', + about: 'A book about effective ways to lead a coffee bean lifestyle', + pages: 256, + }, + { + title: 'The Creative Mindset: Mastering the Six Skills That Empower Innovation', + author: 'Jeff DeGraff and Staney DeGraff', + about: 'A book on how to develop creativity and innovation skills', + pages: 168, + }, + { + title: 'Rich Dad Poor Dad', + author: 'Robert Kiyosaki and Sharon Lechter', + about: 'A book about financial literacy, financial independence, and building wealth. ', + pages: 336, + }, + { + title: 'Zero to Sold', + author: 'Arvid Kahl', + about: 'A book on how to bootstrap a business', + pages: 500, + }, +]; + +console.log("Books in the Library:\n"); + +function getBookInformation(catalog) { + return catalog.map(book => `${book.title} by ${book.author}`).join("\n"); +} + +console.log(getBookInformation(library)); + +console.log("\nList of book summaries:\n"); + +function getBookSummaries(catalog) { + return catalog.map((book) => book.about).join("\n"); +} + +console.log(getBookSummaries(library)); + +console.log("\nList of books by Arvid Kahl:\n"); + +function getBooksByAuthor(catalog, author) { + return catalog.filter((book) => book.author === author); +} + +console.log(getBooksByAuthor(library, "Arvid Kahl")); + +console.log("\nList of books by James Clear:\n"); +console.log(getBooksByAuthor(library, "James Clear")); + +--fcc-editable-region-- + +--fcc-editable-region-- +```