{"id":41223773,"url":"https://github.com/jfarmer/exercises-js-fundamentals","last_synced_at":"2026-01-23T00:26:41.917Z","repository":{"id":40463437,"uuid":"196281322","full_name":"jfarmer/exercises-js-fundamentals","owner":"jfarmer","description":"A collection of JavaScript exercises for new learners","archived":false,"fork":false,"pushed_at":"2023-07-27T21:01:33.000Z","size":658,"stargazers_count":10,"open_issues_count":0,"forks_count":73,"subscribers_count":1,"default_branch":"master","last_synced_at":"2023-07-27T22:21:38.646Z","etag":null,"topics":["javascript","javascript-exercises"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc-by-sa-4.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jfarmer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-07-10T22:11:40.000Z","updated_at":"2023-07-27T18:56:59.000Z","dependencies_parsed_at":"2023-02-08T03:45:15.580Z","dependency_job_id":null,"html_url":"https://github.com/jfarmer/exercises-js-fundamentals","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"purl":"pkg:github/jfarmer/exercises-js-fundamentals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfarmer%2Fexercises-js-fundamentals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfarmer%2Fexercises-js-fundamentals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfarmer%2Fexercises-js-fundamentals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfarmer%2Fexercises-js-fundamentals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jfarmer","download_url":"https://codeload.github.com/jfarmer/exercises-js-fundamentals/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfarmer%2Fexercises-js-fundamentals/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28676073,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T20:48:19.482Z","status":"ssl_error","status_checked_at":"2026-01-22T20:48:14.968Z","response_time":144,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["javascript","javascript-exercises"],"created_at":"2026-01-23T00:26:41.285Z","updated_at":"2026-01-23T00:26:41.896Z","avatar_url":"https://github.com/jfarmer.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# JavaScript Exercises - Fundamentals\n\nThis is a big collection of JavaScript exercises. Within each section, the exercises are roughly ordered from least to most difficult.\n\nWe recommend doing the first 3-5 exercises in each section before doing deeper in any single section.\n\nIf a particular concept isn't familiar to you, go read the relevant section in the [JavaScript crash course][github-intro-javascript].\n\n## Feedback\n\nRemember, the goal is not to nail every exercise, but to create good opportunities for feedback. That means:\n\n1. Devise a clear (but probably incomplete or mistaken) plan\n1. Implement that plan in code as best you can\n1. Get feedback from the computer, peers, and instructors\n1. Revise plan and repeat\n\n## JavaScript Crash Course Sections\n\nHere are some quick links to the different sections in the JavaScript crash course.\n\n- [JavaScript crash course homepage][github-intro-javascript]\n- [Numbers and Strings][intro-data]\n- [Variables][intro-variables]\n- [Conditionals][intro-conditionals]\n- [Arrays and Dictionaries][intro-collections]\n- [Looping][intro-looping]\n- [Functions][intro-functions]\n\n## Numbers\n\n1. [isZero](exercises/numbers/isZero)\n1. [isPositive](exercises/numbers/isPositive)\n1. [isNegative](exercises/numbers/isNegative)\n1. [isEven](exercises/numbers/isEven)\n1. [isOdd](exercises/numbers/isOdd)\n1. [remainderOf](exercises/numbers/remainderOf)\n1. [isMultipleOf](exercises/numbers/isMultipleOf)\n1. [power](exercises/numbers/power)\n1. [isPowerOf](exercises/numbers/isPowerOf)\n1. [isPowerOfTwo](exercises/numbers/isPowerOfTwo)\n1. [isPerfectSquare](exercises/numbers/isPerfectSquare)\n1. [factors](exercises/numbers/factors)\n1. [isPrime](exercises/numbers/isPrime)\n1. [primeFactors](exercises/numbers/primeFactors)\n1. [sumOfRange](exercises/numbers/sumOfRange)\n1. [factorial](exercises/numbers/factorial)\n1. [celsiusToFahrenheit](exercises/numbers/celsiusToFahrenheit)\n1. [fahrenheitToCelsius](exercises/numbers/fahrenheitToCelsius)\n1. [fibonacci](exercises/numbers/fibonacci)\n\n## Strings\n\n1. [countLetter](exercises/strings/countLetter)\n1. [capitalize](exercises/strings/capitalize)\n1. [longestWord](exercises/strings/longestWord)\n1. [shortestWord](exercises/strings/shortestWord)\n1. [replaceCharacter](exercises/strings/replaceCharacter)\n1. [replaceCharacters](exercises/strings/replaceCharacters)\n1. [toLowercase](exercises/strings/toLowercase)\n1. [toUppercase](exercises/strings/toUppercase)\n1. [toSnakeCase](exercises/strings/toSnakeCase)\n1. [toTitleCase](exercises/strings/toTitleCase)\n1. [rot13](exercises/strings/rot13)\n1. [rotN](exercises/strings/rotN)\n\n## Branching / Conditionals\n\n1. [daysInMonthByNumber](exercises/branching-conditionals/daysInMonthByNumber)\n1. [letterGrade](exercises/branching-conditionals/letterGrade)\n1. [isValidTriangle](exercises/branching-conditionals/isValidTriangle)\n1. [triangleType](exercises/branching-conditionals/triangleType)\n1. [rockPaperScissorsWinner](exercises/branching-conditionals/rockPaperScissorsWinner)\n\n## Patterns to Print\n\n1. [printSolidSquare](exercises/patterns/printSolidSquare)\n1. [printSolidRightTriangle](exercises/patterns/printSolidRightTriangle)\n1. [printSolidPyramid](exercises/patterns/printSolidPyramid)\n1. [printHollowSquare](exercises/patterns/printHollowSquare)\n1. [printHollowRightTriangle](exercises/patterns/printHollowRightTriangle)\n1. [printHollowPyramid](exercises/patterns/printHollowPyramid)\n1. [printInvertedSolidRightTriangle](exercises/patterns/printInvertedSolidRightTriangle)\n1. [printMultiplicationTable](exercises/patterns/printMultiplicationTable)\n1. [printPlus](exercises/patterns/printPlus)\n\n## Arrays\n\n1. [largest](exercises/arrays/largest)\n1. [smallest](exercises/arrays/smallest)\n1. [longest](exercises/arrays/longest)\n1. [shortest](exercises/arrays/shortest)\n1. [sum](exercises/arrays/sum)\n1. [mean](exercises/arrays/mean)\n1. [median](exercises/arrays/median)\n1. [product](exercises/arrays/product)\n1. [includes](exercises/arrays/includes)\n1. [firstIndexOf](exercises/arrays/firstIndexOf)\n1. [lastIndexOf](exercises/arrays/lastIndexOf)\n1. [countEvens](exercises/arrays/countEvens)\n1. [countOdds](exercises/arrays/countOdds)\n1. [countGreaterThan](exercises/arrays/countGreaterThan)\n1. [countLessThan](exercises/arrays/countLessThan)\n1. [countValue](exercises/arrays/countValue)\n1. [selectEvens](exercises/arrays/selectEvens)\n1. [selectOdds](exercises/arrays/selectOdds)\n1. [selectGreaterThan](exercises/arrays/selectGreaterThan)\n1. [selectLessThan](exercises/arrays/selectLessThan)\n1. [selectLongerThan](exercises/arrays/selectLongerThan)\n1. [selectShorterThan](exercises/arrays/selectShorterThan)\n1. [allPositive](exercises/arrays/allPositive)\n1. [anyPositive](exercises/arrays/anyPositive)\n1. [concat](exercises/arrays/concat)\n1. [removeEmpty](exercises/arrays/removeEmpty)\n1. [removeElement](exercises/arrays/removeElement)\n1. [selectAboveMean](exercises/arrays/selectAboveMean)\n\n[github-intro-javascript]: https://github.com/jfarmer/intro-javascript\n[intro-data]: https://github.com/jfarmer/intro-javascript/tree/master/Data\n[intro-variables]: https://github.com/jfarmer/intro-javascript/tree/master/Variables\n[intro-conditionals]: https://github.com/jfarmer/intro-javascript/tree/master/Conditionals\n[intro-collections]: https://github.com/jfarmer/intro-javascript/tree/master/Collections\n[intro-looping]: https://github.com/jfarmer/intro-javascript/tree/master/Iteration\n[intro-functions]: https://github.com/jfarmer/intro-javascript/tree/master/Functions\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjfarmer%2Fexercises-js-fundamentals","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjfarmer%2Fexercises-js-fundamentals","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjfarmer%2Fexercises-js-fundamentals/lists"}