- Notifications
You must be signed in to change notification settings - Fork2
📚 A list of popular JavaScript algorithms that you'll encounter in the real world. 🧠
License
AllThingsSmitty/javascript-algorithms
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This repository contains a curated list of JavaScript algorithms, organized by category. These range from simple string manipulation to advanced searching and sorting techniques — perfect for interviews and foundational learning.
Note
Popularity is based on common interview topics, educational materials, and developer community usage.
- Prime Number Check
- Fibonacci Sequence (Recursive)
- Factorial of a Number
- Find the GCD (Greatest Common Divisor)
functionreverseString(str){returnstr.split("").reverse().join("");}console.log(reverseString("hello"));// Output: "olleh"
Explanation: Reverses the characters in a string by splitting, reversing, and joining them back together.
functionisPalindrome(str){returnstr===str.split("").reverse().join("");}console.log(isPalindrome("racecar"));// Output: true
Explanation: Determines if a string reads the same backward as forward using string reversal.
functioncharFrequency(str){constfreq={};for(letcharofstr){freq[char]=(freq[char]||0)+1;}returnfreq;}console.log(charFrequency("hello"));// Output: { h: 1, e: 1, l: 2, o: 1 }
Explanation: Counts how often each character appears in a string.
functionisAnagram(str1,str2){constnormalize=(str)=>str.split("").sort().join("");returnnormalize(str1)===normalize(str2);}console.log(isAnagram("listen","silent"));// Output: true
Explanation: Determines if two strings are anagrams by sorting and comparing them.
functionisPrime(num){if(num<=1)returnfalse;for(leti=2;i<=Math.sqrt(num);i++){if(num%i===0)returnfalse;}returntrue;}console.log(isPrime(7));// Output: true
Explanation: Checks if a number is prime by testing divisibility up to its square root.
functionfibonacci(n){if(n<=1)returnn;returnfibonacci(n-1)+fibonacci(n-2);}console.log(fibonacci(6));// Output: 8
Explanation: Generates the nth Fibonacci number recursively by summing the two preceding numbers.
O(2^n)
and is inefficient for large inputs.
functionfactorial(n){if(n<0)thrownewRangeError("Factorial is not defined for negative numbers");if(n===0||n===1)return1;returnn*factorial(n-1);}console.log(factorial(5));// Output: 120
Explanation: Calculates the factorial of a number recursively by multiplying it with decremented values.
functiongcd(a,b){if(b===0)returna;returngcd(b,a%b);}console.log(gcd(48,18));// Output: 6
Explanation: Uses the Euclidean algorithm to compute the greatest common divisor.
functiontwoSum(nums,target){constmap=newMap();for(leti=0;i<nums.length;i++){constcomplement=target-nums[i];if(map.has(complement))return[map.get(complement),i];map.set(nums[i],i);}return[];}console.log(twoSum([2,7,11,15],9));// Output: [0, 1]
Explanation: Finds two indices such that their values sum to the target using a hash map.
functionbinarySearch(arr,target){letleft=0,right=arr.length-1;while(left<=right){constmid=Math.floor((left+right)/2);if(arr[mid]===target)returnmid;if(arr[mid]<target)left=mid+1;elseright=mid-1;}return-1;}console.log(binarySearch([1,2,3,4,5],4));// Output: 3
Explanation: Searches for a target in a sorted array using a divide-and-conquer approach.
functionbubbleSort(arr){for(leti=0;i<arr.length;i++){for(letj=0;j<arr.length-i-1;j++){if(arr[j]>arr[j+1]){[arr[j],arr[j+1]]=[arr[j+1],arr[j]];}}}returnarr;}console.log(bubbleSort([5,3,8,4,2]));// Output: [2, 3, 4, 5, 8]
Explanation: Sorts an array by repeatedly swapping adjacent elements if they are in the wrong order.
functionquickSort(arr){if(arr.length<=1)returnarr;constpivot=arr[arr.length-1];constleft=[],right=[];for(leti=0;i<arr.length-1;i++){if(arr[i]<pivot)left.push(arr[i]);elseright.push(arr[i]);}return[...quickSort(left),pivot, ...quickSort(right)];}console.log(quickSort([3,6,8,10,1,2,1]));// Output: [1, 1, 2, 3, 6, 8, 10]
Explanation: A divide-and-conquer sorting algorithm with an average-case time complexity ofO(n log n)
.
functionmergeSortedArrays(arr1,arr2){letmerged=[],i=0,j=0;while(i<arr1.length&&j<arr2.length){if(arr1[i]<arr2[j]){merged.push(arr1[i++]);}else{merged.push(arr2[j++]);}}returnmerged.concat(arr1.slice(i)).concat(arr2.slice(j));}console.log(mergeSortedArrays([1,3,5],[2,4,6]));// Output: [1, 2, 3, 4, 5, 6]
Explanation: Merges two sorted arrays into one sorted array by comparing elements sequentially.
functionfindMax(arr){returnMath.max(...arr);}console.log(findMax([1,2,3,4,5]));// Output: 5
Explanation: Finds the largest number in an array using theMath.max
function and spread operator.
functiondebounce(fn,delay){lettimer;returnfunction(...args){clearTimeout(timer);timer=setTimeout(()=>fn.apply(this,args),delay);};}constlog=debounce(()=>console.log("Debounced!"),300);log();log();log();// Logs once after 300ms of inactivity
Explanation: Limits the rate at which a function can fire, commonly used in event handling (e.g., input, scroll).
About
📚 A list of popular JavaScript algorithms that you'll encounter in the real world. 🧠
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Contributors2
Uh oh!
There was an error while loading.Please reload this page.