curriculum/challenges/english/blocks/workshop-library-manager/67116d7584d0b469b14579c4.md
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:
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!
You should create a getTotalPages function.
assert.isFunction(getTotalPages);
Your getTotalPages function should have one parameter.
assert.lengthOf(getTotalPages, 1);
Your getTotalPages function should return a number.
assert.isNumber(getTotalPages(library));
Your getTotalPages function should return the total number of pages in the books from the array passed to it.
assert.strictEqual(getTotalPages(library), 2512);
const _differentLibrary = [
{
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,
},
]
assert.strictEqual(getTotalPages(_differentLibrary), 944);
You should have a console.log(getTotalPages(library)).
assert.match(code, /console\.log\(\s*getTotalPages\(\s*library\)\s*\);?/);
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");
--fcc-editable-region--
--fcc-editable-region--
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));