diff --git a/assignments/array-methods.js b/assignments/array-methods.js index f3862361e..9f43c6605 100644 --- a/assignments/array-methods.js +++ b/assignments/array-methods.js @@ -1,85 +1,499 @@ -// A local community center is holding a fund raising 5k fun run and has invited 50 small businesses to make a small donation on their behalf for some much needed updates to their facilities. Each business has assigned a representative to attend the event along with a small donation. +// A local community center is holding a fund raising 5k fun run and has invited 50 small businesses to make a small donation on +// their behalf for some much needed updates to their facilities. Each business has assigned a representative to attend the event +// along with a small donation. -// Scroll to the bottom of the list to use some advanced array methods to help the event director gather some information from the businesses. +// Scroll to the bottom of the list to use some advanced array methods to help the event director gather some information from the +// businesses. const runners = [ - { id: 1, first_name: "Charmain", last_name: "Seiler", email: "cseiler0@wired.com", shirt_size: "2XL", company_name: "Divanoodle", donation: 75 }, - { id: 2, first_name: "Whitaker", last_name: "Ierland", email: "wierland1@angelfire.com", shirt_size: "2XL", company_name: "Wordtune", donation: 148 }, - { id: 3, first_name: "Julieta", last_name: "McCloid", email: "jmccloid2@yahoo.com", shirt_size: "S", company_name: "Riffpedia", donation: 171 }, - { id: 4, first_name: "Martynne", last_name: "Paye", email: "mpaye3@sciencedaily.com", shirt_size: "XL", company_name: "Wordware", donation: 288 }, - { id: 5, first_name: "Gussy", last_name: "Raraty", email: "graraty4@ucoz.ru", shirt_size: "L", company_name: "Oozz", donation: 291 }, - { id: 6, first_name: "Yule", last_name: "Tommasetti", email: "ytommasetti5@state.gov", shirt_size: "S", company_name: "Yodo", donation: 27 }, - { id: 7, first_name: "Kathie", last_name: "Majury", email: "kmajury6@guardian.co.uk", shirt_size: "3XL", company_name: "Zoomcast", donation: 261 }, - { id: 8, first_name: "Tanner", last_name: "Branton", email: "tbranton7@tmall.com", shirt_size: "2XL", company_name: "Realmix", donation: 28 }, - { id: 9, first_name: "Sarina", last_name: "Lasham", email: "slasham8@toplist.cz", shirt_size: "XL", company_name: "Gigashots", donation: 110 }, - { id: 10, first_name: "Bertie", last_name: "Lonergan", email: "blonergan9@issuu.com", shirt_size: "3XL", company_name: "Skinte", donation: 62 }, - { id: 11, first_name: "Trevor", last_name: "Studd", email: "tstudda@networkadvertising.org", shirt_size: "S", company_name: "Cogidoo", donation: 76 }, - { id: 12, first_name: "Malachi", last_name: "Okeshott", email: "mokeshottb@chron.com", shirt_size: "M", company_name: "DabZ", donation: 91 }, - { id: 13, first_name: "Berget", last_name: "Logsdail", email: "blogsdailc@wix.com", shirt_size: "M", company_name: "Mymm", donation: 9 }, - { id: 14, first_name: "Loise", last_name: "Rivlin", email: "lrivlind@behance.net", shirt_size: "2XL", company_name: "Linktype", donation: 204 }, - { id: 15, first_name: "Christan", last_name: "Kendall", email: "ckendalle@example.com", shirt_size: "XS", company_name: "Skinix", donation: 252 }, - { id: 16, first_name: "Kayla", last_name: "Whitwam", email: "kwhitwamf@deliciousdays.com", shirt_size: "2XL", company_name: "Oyope", donation: 147 }, - { id: 17, first_name: "Heddie", last_name: "Heningam", email: "hheningamg@tripadvisor.com", shirt_size: "L", company_name: "Skinix", donation: 172 }, - { id: 18, first_name: "Mace", last_name: "Ballinger", email: "mballingerh@a8.net", shirt_size: "S", company_name: "Nlounge", donation: 266 }, - { id: 19, first_name: "Nola", last_name: "Abberley", email: "nabberleyi@jalbum.net", shirt_size: "XL", company_name: "Photospace", donation: 148 }, - { id: 20, first_name: "Nadine", last_name: "Tresler", email: "ntreslerj@marketwatch.com", shirt_size: "3XL", company_name: "Wikido", donation: 292 }, - { id: 21, first_name: "Ulrikaumeko", last_name: "Vuittet", email: "uvuittetk@gov.uk", shirt_size: "S", company_name: "Skinte", donation: 102 }, - { id: 22, first_name: "Saunder", last_name: "Spennock", email: "sspennockl@icq.com", shirt_size: "3XL", company_name: "Kwimbee", donation: 213 }, - { id: 23, first_name: "Carmel", last_name: "Woffinden", email: "cwoffindenm@wikispaces.com", shirt_size: "S", company_name: "Rooxo", donation: 137 }, - { id: 24, first_name: "Marielle", last_name: "Kimmel", email: "mkimmeln@jimdo.com", shirt_size: "M", company_name: "Livetube", donation: 96 }, - { id: 25, first_name: "Brucie", last_name: "Burris", email: "bburriso@slate.com", shirt_size: "2XL", company_name: "Wordtune", donation: 128 }, - { id: 26, first_name: "Juan", last_name: "Berzon", email: "jberzonp@soup.io", shirt_size: "3XL", company_name: "Einti", donation: 234 }, - { id: 27, first_name: "Sacha", last_name: "Olsen", email: "solsenq@reverbnation.com", shirt_size: "2XL", company_name: "Viva", donation: 190 }, - { id: 28, first_name: "Jamey", last_name: "O'Nolan", email: "jonolanr@samsung.com", shirt_size: "XL", company_name: "Skinix", donation: 31 }, - { id: 29, first_name: "Morrie", last_name: "Rainard", email: "mrainards@yale.edu", shirt_size: "XS", company_name: "Podcat", donation: 52 }, - { id: 30, first_name: "Fidel", last_name: "Roskelly", email: "froskellyt@ibm.com", shirt_size: "XS", company_name: "Avavee", donation: 5 }, - { id: 31, first_name: "Toni", last_name: "MacSweeney", email: "tmacsweeneyu@parallels.com", shirt_size: "M", company_name: "Jaloo", donation: 82 }, - { id: 32, first_name: "Jessey", last_name: "Walhedd", email: "jwalheddv@slashdot.org", shirt_size: "L", company_name: "Trilia", donation: 5 }, - { id: 33, first_name: "Karola", last_name: "Piper", email: "kpiperw@ucsd.edu", shirt_size: "3XL", company_name: "Yombu", donation: 110 }, - { id: 34, first_name: "Marley", last_name: "Mitchenson", email: "mmitchensonx@webeden.co.uk", shirt_size: "M", company_name: "Zoonoodle", donation: 97 }, - { id: 35, first_name: "Marrilee", last_name: "Thrasher", email: "mthrashery@opensource.org", shirt_size: "XL", company_name: "Bluejam", donation: 17 }, - { id: 36, first_name: "Tye", last_name: "Manie", email: "tmaniez@netscape.com", shirt_size: "L", company_name: "Kanoodle", donation: 30 }, - { id: 37, first_name: "Charleen", last_name: "Sheering", email: "csheering10@mit.edu", shirt_size: "3XL", company_name: "Jatri", donation: 262 }, - { id: 38, first_name: "Valma", last_name: "Eynaud", email: "veynaud11@archive.org", shirt_size: "XS", company_name: "Jaxbean", donation: 212 }, - { id: 39, first_name: "Dollie", last_name: "McDarmid", email: "dmcdarmid12@tinyurl.com", shirt_size: "S", company_name: "Kayveo", donation: 74 }, - { id: 40, first_name: "Minna", last_name: "Hymas", email: "mhymas13@cornell.edu", shirt_size: "XS", company_name: "Vimbo", donation: 101 }, - { id: 41, first_name: "Jsandye", last_name: "Frend", email: "jfrend14@ca.gov", shirt_size: "XS", company_name: "Latz", donation: 156 }, - { id: 42, first_name: "Yevette", last_name: "Hacket", email: "yhacket15@wp.com", shirt_size: "XL", company_name: "Lazzy", donation: 291 }, - { id: 43, first_name: "Hank", last_name: "Zebedee", email: "hzebedee16@ezinearticles.com", shirt_size: "L", company_name: "Gigashots", donation: 241 }, - { id: 44, first_name: "Jodie", last_name: "Stawell", email: "jstawell17@yale.edu", shirt_size: "S", company_name: "Jaxspan", donation: 262 }, - { id: 45, first_name: "Falito", last_name: "Karsh", email: "fkarsh18@pcworld.com", shirt_size: "S", company_name: "Mycat", donation: 239 }, - { id: 46, first_name: "Reginauld", last_name: "Purselowe", email: "rpurselowe19@thetimes.co.uk", shirt_size: "L", company_name: "Jabbersphere", donation: 11 }, - { id: 47, first_name: "Vida", last_name: "Tydd", email: "vtydd1a@dropbox.com", shirt_size: "S", company_name: "Quaxo", donation: 55 }, - { id: 48, first_name: "Anderea", last_name: "MacGiolla Pheadair", email: "amacgiollapheadair1b@xing.com", shirt_size: "2XL", company_name: "Kwimbee", donation: 214 }, - { id: 49, first_name: "Bel", last_name: "Alway", email: "balway1c@ow.ly", shirt_size: "S", company_name: "Voolia", donation: 107 }, - { id: 50, first_name: "Shell", last_name: "Baine", email: "sbaine1d@intel.com", shirt_size: "M", company_name: "Gabtype", donation: 171 }, -]; + { + id: 1, + first_name: 'Charmain', + last_name: 'Seiler', + email: 'cseiler0@wired.com', + shirt_size: '2XL', + company_name: 'Divanoodle', + donation: 75 + }, + { + id: 2, + first_name: 'Whitaker', + last_name: 'Ireland', + email: 'wierland1@angelfire.com', + shirt_size: '2XL', + company_name: 'Wordtune', + donation: 148 + }, + { + id: 3, + first_name: 'Julieta', + last_name: 'McCloid', + email: 'jmccloid2@yahoo.com', + shirt_size: 'S', + company_name: 'Riffpedia', + donation: 171 + }, + { + id: 4, + first_name: 'Martynne', + last_name: 'Paye', + email: 'mpaye3@sciencedaily.com', + shirt_size: 'XL', + company_name: 'Wordware', + donation: 288 + }, + { + id: 5, + first_name: 'Gussy', + last_name: 'Raraty', + email: 'graraty4@ucoz.ru', + shirt_size: 'L', + company_name: 'Oozz', + donation: 291 + }, + { + id: 6, + first_name: 'Yule', + last_name: 'Tommasetti', + email: 'ytommasetti5@state.gov', + shirt_size: 'S', + company_name: 'Yodo', + donation: 27 + }, + { + id: 7, + first_name: 'Kathie', + last_name: 'Majury', + email: 'kmajury6@guardian.co.uk', + shirt_size: '3XL', + company_name: 'Zoomcast', + donation: 261 + }, + { + id: 8, + first_name: 'Tanner', + last_name: 'Branton', + email: 'tbranton7@tmall.com', + shirt_size: '2XL', + company_name: 'Realmix', + donation: 28 + }, + { + id: 9, + first_name: 'Sarina', + last_name: 'Lasham', + email: 'slasham8@toplist.cz', + shirt_size: 'XL', + company_name: 'Gigashots', + donation: 110 + }, + { + id: 10, + first_name: 'Bertie', + last_name: 'Lonergan', + email: 'blonergan9@issuu.com', + shirt_size: '3XL', + company_name: 'Skinte', + donation: 62 + }, + { + id: 11, + first_name: 'Trevor', + last_name: 'Studd', + email: 'tstudda@networkadvertising.org', + shirt_size: 'S', + company_name: 'Cogidoo', + donation: 76 + }, + { + id: 12, + first_name: 'Malachi', + last_name: 'Okeshott', + email: 'mokeshottb@chron.com', + shirt_size: 'M', + company_name: 'DabZ', + donation: 91 + }, + { + id: 13, + first_name: 'Berget', + last_name: 'Logsdail', + email: 'blogsdailc@wix.com', + shirt_size: 'M', + company_name: 'Mymm', + donation: 9 + }, + { + id: 14, + first_name: 'Loise', + last_name: 'Rivlin', + email: 'lrivlind@behance.net', + shirt_size: '2XL', + company_name: 'Linktype', + donation: 204 + }, + { + id: 15, + first_name: 'Christan', + last_name: 'Kendall', + email: 'ckendalle@example.com', + shirt_size: 'XS', + company_name: 'Skinix', + donation: 252 + }, + { + id: 16, + first_name: 'Kayla', + last_name: 'Whitwam', + email: 'kwhitwamf@deliciousdays.com', + shirt_size: '2XL', + company_name: 'Oyope', + donation: 147 + }, + { + id: 17, + first_name: 'Heddie', + last_name: 'Heningam', + email: 'hheningamg@tripadvisor.com', + shirt_size: 'L', + company_name: 'Skinix', + donation: 172 + }, + { + id: 18, + first_name: 'Mace', + last_name: 'Ballinger', + email: 'mballingerh@a8.net', + shirt_size: 'S', + company_name: 'Nlounge', + donation: 266 + }, + { + id: 19, + first_name: 'Nola', + last_name: 'Abberley', + email: 'nabberleyi@jalbum.net', + shirt_size: 'XL', + company_name: 'Photospace', + donation: 148 + }, + { + id: 20, + first_name: 'Nadine', + last_name: 'Tresler', + email: 'ntreslerj@marketwatch.com', + shirt_size: '3XL', + company_name: 'Wikido', + donation: 292 + }, + { + id: 21, + first_name: 'Ulrikaumeko', + last_name: 'Vuittet', + email: 'uvuittetk@gov.uk', + shirt_size: 'S', + company_name: 'Skinte', + donation: 102 + }, + { + id: 22, + first_name: 'Saunder', + last_name: 'Spennock', + email: 'sspennockl@icq.com', + shirt_size: '3XL', + company_name: 'Kwimbee', + donation: 213 + }, + { + id: 23, + first_name: 'Carmel', + last_name: 'Woffinden', + email: 'cwoffindenm@wikispaces.com', + shirt_size: 'S', + company_name: 'Rooxo', + donation: 137 + }, + { + id: 24, + first_name: 'Marielle', + last_name: 'Kimmel', + email: 'mkimmeln@jimdo.com', + shirt_size: 'M', + company_name: 'Livetube', + donation: 96 + }, + { + id: 25, + first_name: 'Brucie', + last_name: 'Burris', + email: 'bburriso@slate.com', + shirt_size: '2XL', + company_name: 'Wordtune', + donation: 128 + }, + { + id: 26, + first_name: 'Juan', + last_name: 'Berzon', + email: 'jberzonp@soup.io', + shirt_size: '3XL', + company_name: 'Einti', + donation: 234 + }, + { + id: 27, + first_name: 'Sacha', + last_name: 'Olsen', + email: 'solsenq@reverbnation.com', + shirt_size: '2XL', + company_name: 'Viva', + donation: 190 + }, + { + id: 28, + first_name: 'Jamey', + last_name: "O'Nolan", + email: 'jonolanr@samsung.com', + shirt_size: 'XL', + company_name: 'Skinix', + donation: 31 + }, + { + id: 29, + first_name: 'Morrie', + last_name: 'Rainard', + email: 'mrainards@yale.edu', + shirt_size: 'XS', + company_name: 'Podcat', + donation: 52 + }, + { + id: 30, + first_name: 'Fidel', + last_name: 'Roskelly', + email: 'froskellyt@ibm.com', + shirt_size: 'XS', + company_name: 'Avavee', + donation: 5 + }, + { + id: 31, + first_name: 'Toni', + last_name: 'MacSweeney', + email: 'tmacsweeneyu@parallels.com', + shirt_size: 'M', + company_name: 'Jaloo', + donation: 82 + }, + { + id: 32, + first_name: 'Jessey', + last_name: 'Walhedd', + email: 'jwalheddv@slashdot.org', + shirt_size: 'L', + company_name: 'Trilia', + donation: 5 + }, + { + id: 33, + first_name: 'Karola', + last_name: 'Piper', + email: 'kpiperw@ucsd.edu', + shirt_size: '3XL', + company_name: 'Yombu', + donation: 110 + }, + { + id: 34, + first_name: 'Marley', + last_name: 'Mitchenson', + email: 'mmitchensonx@webeden.co.uk', + shirt_size: 'M', + company_name: 'Zoonoodle', + donation: 97 + }, + { + id: 35, + first_name: 'Marrilee', + last_name: 'Thrasher', + email: 'mthrashery@opensource.org', + shirt_size: 'XL', + company_name: 'Bluejam', + donation: 17 + }, + { + id: 36, + first_name: 'Tye', + last_name: 'Manie', + email: 'tmaniez@netscape.com', + shirt_size: 'L', + company_name: 'Kanoodle', + donation: 30 + }, + { + id: 37, + first_name: 'Charleen', + last_name: 'Sheering', + email: 'csheering10@mit.edu', + shirt_size: '3XL', + company_name: 'Jatri', + donation: 262 + }, + { + id: 38, + first_name: 'Valma', + last_name: 'Eynaud', + email: 'veynaud11@archive.org', + shirt_size: 'XS', + company_name: 'Jaxbean', + donation: 212 + }, + { + id: 39, + first_name: 'Dollie', + last_name: 'McDarmid', + email: 'dmcdarmid12@tinyurl.com', + shirt_size: 'S', + company_name: 'Kayveo', + donation: 74 + }, + { + id: 40, + first_name: 'Minna', + last_name: 'Hymas', + email: 'mhymas13@cornell.edu', + shirt_size: 'XS', + company_name: 'Vimbo', + donation: 101 + }, + { + id: 41, + first_name: 'Jsandye', + last_name: 'Frend', + email: 'jfrend14@ca.gov', + shirt_size: 'XS', + company_name: 'Latz', + donation: 156 + }, + { + id: 42, + first_name: 'Yevette', + last_name: 'Hacket', + email: 'yhacket15@wp.com', + shirt_size: 'XL', + company_name: 'Lazzy', + donation: 291 + }, + { + id: 43, + first_name: 'Hank', + last_name: 'Zebedee', + email: 'hzebedee16@ezinearticles.com', + shirt_size: 'L', + company_name: 'Gigashots', + donation: 241 + }, + { + id: 44, + first_name: 'Jodie', + last_name: 'Stawell', + email: 'jstawell17@yale.edu', + shirt_size: 'S', + company_name: 'Jaxspan', + donation: 262 + }, + { + id: 45, + first_name: 'Falito', + last_name: 'Karsh', + email: 'fkarsh18@pcworld.com', + shirt_size: 'S', + company_name: 'Mycat', + donation: 239 + }, + { + id: 46, + first_name: 'Reginauld', + last_name: 'Purselowe', + email: 'rpurselowe19@thetimes.co.uk', + shirt_size: 'L', + company_name: 'Jabbersphere', + donation: 11 + }, + { + id: 47, + first_name: 'Vida', + last_name: 'Tydd', + email: 'vtydd1a@dropbox.com', + shirt_size: 'S', + company_name: 'Quaxo', + donation: 55 + }, + { + id: 48, + first_name: 'Anderea', + last_name: 'MacGiolla Pheadair', + email: 'amacgiollapheadair1b@xing.com', + shirt_size: '2XL', + company_name: 'Kwimbee', + donation: 214 + }, + { + id: 49, + first_name: 'Bel', + last_name: 'Alway', + email: 'balway1c@ow.ly', + shirt_size: 'S', + company_name: 'Voolia', + donation: 107 + }, + { + id: 50, + first_name: 'Shell', + last_name: 'Baine', + email: 'sbaine1d@intel.com', + shirt_size: 'M', + company_name: 'Gabtype', + donation: 171 + } +] // ==== Challenge 1: Use .forEach() ==== -// The event director needs both the first and last names of each runner for their running bibs. Combine both the first and last names and populate a new array called `fullNames`. This array will contain just strings. -let fullNames = []; -console.log(fullNames); +// The event director needs both the first and last names of each runner for their running bibs. Combine both the first and last +// names and populate a new array called `fullNames`. This array will contain just strings. +let fullNames = [] +runners.forEach((runner) => { + fullNames.push(runner.first_name + runner.last_name); +}) +console.log(fullNames) // ==== Challenge 2: Use .map() ==== -// The event director needs to have all the runners' first names in uppercase because the director BECAME DRUNK WITH POWER. Populate an array called `firstNamesAllCaps`. This array will contain just strings. -let firstNamesAllCaps = []; -console.log(firstNamesAllCaps); +// The event director needs to have all the runners' first names in uppercase because the director BECAME DRUNK WITH POWER. +// Populate an array called `firstNamesAllCaps`. This array will contain just strings. +const firstNamesAllCaps = runners.map(runner => runner.first_name.toUpperCase()); +console.log(firstNamesAllCaps) // ==== Challenge 3: Use .filter() ==== -// The large shirts won't be available for the event due to an ordering issue. We need a filtered version of the runners array, containing only those runners with large sized shirts so they can choose a different size. This will be an array of objects. -let runnersLargeSizeShirt = []; -console.log(runnersLargeSizeShirt); +// The large shirts won't be available for the event due to an ordering issue. We need a filtered version of the runners array, +// containing only those runners with large sized shirts so they can choose a different size. This will be an array of objects. +const runnersLargeSizeShirt = runners.filter(runner => runner.shirt_size === 'L'); +console.log(runnersLargeSizeShirt) // ==== Challenge 4: Use .reduce() ==== -// The donations need to be tallied up and reported for tax purposes. Add up all the donations and save the total into a ticketPriceTotal variable. -let ticketPriceTotal = 0; -console.log(ticketPriceTotal); +// The donations need to be tallied up and reported for tax purposes. Add up all the donations and save the total into a +// ticketPriceTotal variable. +const ticketPriceTotal = runners.reduce((total, current) => { + if (isNaN(total)) total = current.donation; // first iteration of total is simply first object in runners array + return total + current.donation; +}) +console.log(ticketPriceTotal) // ==== Challenge 5: Be Creative ==== -// Now that you have used .forEach(), .map(), .filter(), and .reduce(). I want you to think of potential problems you could solve given the data set and the 5k fun run theme. Try to create and then solve 3 unique problems using one or many of the array methods listed above. +// Now that you have used .forEach(), .map(), .filter(), and .reduce(). I want you to think of potential problems you could solve +// given the data set and the 5k fun run theme. Try to create and then solve 3 unique problems using one or many of the array methods listed above. // Problem 1 // Problem 2 -// Problem 3 \ No newline at end of file +// Problem 3 diff --git a/assignments/callbacks.js b/assignments/callbacks.js index cb72e70c9..ba167b0b1 100644 --- a/assignments/callbacks.js +++ b/assignments/callbacks.js @@ -1,6 +1,8 @@ -// Create a higher order function and invoke the callback function to test your work. You have been provided an example of a problem and a solution to see how this works with our items array. Study both the problem and the solution to figure out the rest of the problems. +// Create a higher order function and invoke the callback function to test your work. You have been provided an example of a +// problem and a solution to see how this works with our items array. Study both the problem and the solution to figure out the +// rest of the problems. -const items = ['Pencil', 'Notebook', 'yo-yo', 'Gum']; +const items = ['Pencil', 'Notebook', 'yo-yo', 'Gum'] /* @@ -38,32 +40,153 @@ const items = ['Pencil', 'Notebook', 'yo-yo', 'Gum']; console.log(test2); // "this Pencil is worth a million dollars!" */ - -function getLength(arr, cb) { +function getLength (arr, cb) { // getLength passes the length of the array into the callback. + return cb(arr) +} + +// inlined callback: +const length = getLength(items, () => items.length) +console.log('Inline getLength: ', length) + +// pre declaring callback: +function getLenCB (ar) { + return ar.length } -function last(arr, cb) { +const newLength = getLength(items, getLenCB) +console.log('predeclared newLength: ', newLength) + +///////////////////////////////////////////////////////////////////////////////////// + +function last (arr, cb) { // last passes the last item of the array into the callback. + return cb(arr) } -function sumNums(x, y, cb) { +// inlined callback: +const inlineLast = last(items, () => items[items.length - 1]) +console.log('inlineLast: ', inlineLast) + +// pre declaring callback: +function getLast (ar) { + return ar[ar.length - 1] +} + +const preDeclaredLast = last(items, getLast) +console.log('preDeclaredLast: ', preDeclaredLast) + +/////////////////////////////////////////////////////////////////////////////////// + +function sumNums (x, y, cb) { // sumNums adds two numbers (x, y) and passes the result to the callback. + return cb(x, y) +} + +const a = 10 +const b = 20 + +// inlined callback: +const inlineSum = sumNums(a, b, () => a + b) +console.log('inlineSum: ', inlineSum) + +// pre declaring callback: +function getSum (arg1, arg2) { + return arg1 + arg2 } -function multiplyNums(x, y, cb) { +const preDeclaredSum = sumNums(a, b, getSum) +console.log('preDeclaredSum: ', preDeclaredSum) + +/////////////////////////////////////////////////////////////////////////////////////// + +function multiplyNums (x, y, cb) { // multiplyNums multiplies two numbers and passes the result to the callback. + return cb(x, y) } +const factorOne = 10 +const factorTwo = 5 + +// inlined callback: +const inlinedProduct = multiplyNums( + factorOne, + factorTwo, + () => factorOne * factorTwo +) +console.log('inlinedProduct: ', inlinedProduct) + +// pre declaring callback: +function getProduct (arg1, arg2) { + return arg1 * arg2 +} + +const preDeclaredProduct = multiplyNums(factorOne, factorTwo, getProduct) +console.log('preDeclaredProduct: ', preDeclaredProduct) -function contains(item, list, cb) { +////////////////////////////////////////////////////////////////////////////////////// + +function contains (item, list, cb) { // contains checks if an item is present inside of the given array/list. // Pass true to the callback if it is, otherwise pass false. + return cb(item, list); +} + +// inlined callback: +const inlineTrue = contains('yo-yo', items, (i, l) => { + let found = false; + l.forEach((thing) => { + if (thing === i) { + found = true; + } + }) + return found; +}) +console.log("inlineTrue: ", inlineTrue); + +// pre declared callback: +function findItem (i, l) { + let found = false; + l.forEach((thing) => { + if (thing === i) { + found = true; + } + }) + return found; } +const preDeclaredTrue = contains('Gum', items, findItem); +console.log("preDeclaredTrue: ", preDeclaredTrue); + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* STRETCH PROBLEM */ -function removeDuplicates(array, cb) { +const dupeyArr = ['hello', 'world', 'hello', 'world', 'this', 'is', 'a', 'derpty', 'derp', 'hello', 'derpina', 'shopping']; + +function removeDuplicates (array, cb) { // removeDuplicates removes all duplicate values from the given array. // Pass the duplicate free array to the callback function. // Do not mutate the original array. + const noDuplicates = {}; + array.forEach((item) => { + if (noDuplicates[item] === undefined) { + noDuplicates[item] = true; + } + }) + const arr = Object.keys(noDuplicates); + return cb(arr); } + + +// inlined callback: +const noDupes = removeDuplicates(dupeyArr, (arr) => { + return arr; +}); +console.log(noDupes); + +// pre declared callback: +function callback(ar) { + return ar; +} + +const preNoDupes = removeDuplicates(dupeyArr, callback); +console.log(preNoDupes); \ No newline at end of file diff --git a/assignments/closure.js b/assignments/closure.js index 4b399c098..adfd664b0 100644 --- a/assignments/closure.js +++ b/assignments/closure.js @@ -9,17 +9,24 @@ // ==== Challenge 2: Implement a "counter maker" function ==== -const counterMaker = () => { +const counterMaker = (limit) => { // IMPLEMENTATION OF counterMaker: // 1- Declare a `count` variable with a value of 0. We will be mutating it, so declare it using `let`! // 2- Declare a function `counter`. It should increment and return `count`. // NOTE: This `counter` function, being nested inside `counterMaker`, // "closes over" the `count` variable. It can "see" it in the parent scope! // 3- Return the `counter` function. + let count = 0; + const counter = () => { + count = count < limit ? count+1 : 0; + return count; + } + return counter; }; -// Example usage: const myCounter = counterMaker(); -// myCounter(); // 1 -// myCounter(); // 2 +const myCounter = counterMaker(10); +for (let i = 0; i < 11; i++) { + console.log(myCounter()); +} // ==== Challenge 3: Make `counterMaker` more sophisticated ==== // It should have a `limit` parameter. Any counters we make with `counterMaker` @@ -30,4 +37,23 @@ const counterFactory = () => { // Return an object that has two methods called `increment` and `decrement`. // `increment` should increment a counter variable in closure scope and return it. // `decrement` should decrement the counter variable and return it. + let count = 0; + const counter = { + increment: function() { + return ++count; + }, + decrement: function() { + return --count; + } + } + return counter; }; + + const Count = counterFactory(); +for (let i = 0; i < 10; i++) { + console.log(Count.increment()); +} + +for (let i = 0; i < 11; i++) { + console.log(Count.decrement()); +}