JavaScript Programs

Practice Code Examples

Hands-on JavaScript programs to practice and master the language. From basic to advanced level.

ES2023 ✓ Practice 40 Programs
01

Basic Programs

#1Check Prime NumberBasic
JavaScript
function isPrime(n) {
  if (n < 2) return false;
  for (let i = 2; i <= Math.sqrt(n); i++) {
    if (n % i === 0) return false;
  }
  return true;
}
console.log(isPrime(17));  // true
console.log(isPrime(4));   // false
#2Factorial of a NumberBasic
JavaScript
function factorial(n) {
  return n <= 1 ? 1 : n * factorial(n - 1);
}
console.log(factorial(5));   // 120
#3Fibonacci SequenceBasic
JavaScript
function fibonacci(count) {
  const seq = [0, 1];
  while (seq.length < count) seq.push(seq[seq.length - 1] + seq[seq.length - 2]);
  return seq.slice(0, count);
}
console.log(fibonacci(8));   // [0,1,1,2,3,5,8,13]
#4Reverse a StringBasic
JavaScript
function reverseString(s) {
  return s.split("").reverse().join("");
}
console.log(reverseString("hello"));   // "olleh"
#5Check PalindromeBasic
JavaScript
function isPalindrome(s) {
  const clean = s.toLowerCase().replace(/[^a-z0-9]/g, "");
  return clean === clean.split("").reverse().join("");
}
console.log(isPalindrome("Race car"));   // true
#6Swap Two Variables (No Temp)Basic
JavaScript
let a = 5, b = 10;
[a, b] = [b, a];        // destructuring assignment — no temp variable
console.log(a, b);   // 10 5
#7Celsius to Fahrenheit ConverterBasic
JavaScript
const toFahrenheit = c => (c * 9) / 5 + 32;
console.log(toFahrenheit(100));   // 212
#8Check Positive, Negative or ZeroBasic
JavaScript
function sign(n) {
  return n > 0 ? "positive" : n < 0 ? "negative" : "zero";
}
console.log(sign(-4));   // "negative"
#9Check Odd or EvenBasic
JavaScript
const isEven = n => n % 2 === 0;
console.log(isEven(7));   // false
#10Check Leap YearBasic
JavaScript
function isLeapYear(y) {
  return (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0;
}
console.log(isLeapYear(2024));   // true
#11Print Primes in a RangeBasic
JavaScript
function primesInRange(start, end) {
  const isPrime = n => {
    if (n < 2) return false;
    for (let i = 2; i <= Math.sqrt(n); i++) if (n % i === 0) return false;
    return true;
  };
  const result = [];
  for (let n = start; n <= end; n++) if (isPrime(n)) result.push(n);
  return result;
}
console.log(primesInRange(10, 30));   // [11,13,17,19,23,29]
#12Multiplication TableBasic
JavaScript
function table(n, upTo = 10) {
  return Array.from({ length: upTo }, (_, i) => `${n} x ${i + 1} = ${n * (i + 1)}`);
}
table(5, 3);   // ["5 x 1 = 5", "5 x 2 = 10", "5 x 3 = 15"]
#13Sum of Natural NumbersBasic
JavaScript
const sumUpTo = n => (n * (n + 1)) / 2;
console.log(sumUpTo(100));   // 5050
#14Find LCM and HCF of Two NumbersBasic
JavaScript
function hcf(a, b) { return b === 0 ? a : hcf(b, a % b); }
function lcm(a, b) { return (a * b) / hcf(a, b); }
console.log(hcf(36, 60), lcm(36, 60));   // 12 180
#15Decimal to Binary, Octal, HexBasic
JavaScript
const n = 42;
n.toString(2);    // "101010" — binary
n.toString(8);    // "52"     — octal
n.toString(16);   // "2a"     — hex
parseInt("2a", 16);   // 42 — back to decimal
#16ASCII Value of a CharacterBasic
JavaScript
"A".charCodeAt(0);        // 65
String.fromCharCode(97);   // "a"
#17Simple CalculatorBasic
JavaScript
function calculate(a, op, b) {
  const ops = { "+": (a,b)=>a+b, "-": (a,b)=>a-b, "*": (a,b)=>a*b, "/": (a,b)=>a/b };
  if (!ops[op]) throw new Error("Unknown operator");
  return ops[op](a, b);
}
console.log(calculate(6, "*", 7));   // 42
#18FizzBuzzBasic
JavaScript
for (let i = 1; i <= 15; i++) {
  if (i % 15 === 0) console.log("FizzBuzz");
  else if (i % 3 === 0) console.log("Fizz");
  else if (i % 5 === 0) console.log("Buzz");
  else console.log(i);
}
#19Count Vowels in a StringBasic
JavaScript
function countVowels(s) {
  return (s.match(/[aeiou]/gi) || []).length;
}
console.log(countVowels("JavaScript"));   // 3
#20Find the Largest of Three NumbersBasic
JavaScript
const largest = Math.max(4, 19, 7);
console.log(largest);   // 19
02

Intermediate Programs

#21Binary SearchIntermediate
JavaScript
function binarySearch(arr, target) {
  let lo = 0, hi = arr.length - 1;
  while (lo <= hi) {
    const mid = Math.floor((lo + hi) / 2);
    if (arr[mid] === target) return mid;
    if (arr[mid] < target) lo = mid + 1;
    else hi = mid - 1;
  }
  return -1;
}
console.log(binarySearch([1,3,5,7,9], 7));   // 3
#22Bubble SortIntermediate
JavaScript
function bubbleSort(arr) {
  const a = [...arr];
  for (let i = 0; i < a.length; i++) {
    for (let j = 0; j < a.length - i - 1; j++) {
      if (a[j] > a[j + 1]) [a[j], a[j+1]] = [a[j+1], a[j]];
    }
  }
  return a;
}
bubbleSort([5,2,8,1]);   // [1,2,5,8]
#23Count Word FrequencyIntermediate
JavaScript
function wordFrequency(text) {
  const counts = {};
  for (const w of text.toLowerCase().split(/\s+/)) counts[w] = (counts[w] || 0) + 1;
  return counts;
}
wordFrequency("the cat and the dog");   // { the:2, cat:1, and:1, dog:1 }
#24Sum & Largest Element of an ArrayIntermediate
JavaScript
const nums = [4, 9, 2, 7];
nums.reduce((a,b) => a+b, 0);   // 22
Math.max(...nums);            // 9
#25Rotate an Array by K PositionsIntermediate
JavaScript
function rotate(arr, k) {
  const n = arr.length;
  k = k % n;
  return [...arr.slice(n - k), ...arr.slice(0, n - k)];
}
rotate([1,2,3,4,5], 2);   // [4,5,1,2,3]
#26Remove Duplicates from an ArrayIntermediate
JavaScript
const unique = [...new Set([1,2,2,3,3,4])];
console.log(unique);   // [1,2,3,4]
#27Second Largest Number in an ArrayIntermediate
JavaScript
function secondLargest(arr) {
  return [...new Set(arr)].sort((a,b) => b-a)[1];
}
secondLargest([5, 9, 9, 3]);   // 5
#28Flatten a Nested ArrayIntermediate
JavaScript
const nested = [1, [2, [3, [4]], 5]];
nested.flat(Infinity);   // [1,2,3,4,5] — Infinity flattens any depth
#29Check if a String is an AnagramIntermediate
JavaScript
function isAnagram(a, b) {
  const norm = s => s.toLowerCase().split("").sort().join("");
  return norm(a) === norm(b);
}
isAnagram("listen", "silent");   // true
#30Capitalize Each Word in a SentenceIntermediate
JavaScript
function titleCase(s) {
  return s.split(" ").map(w => w[0].toUpperCase() + w.slice(1)).join(" ");
}
titleCase("the quick brown fox");   // "The Quick Brown Fox"
#31Group Array of Objects by KeyIntermediate
JavaScript
const people = [{name:"A",team:"red"}, {name:"B",team:"blue"}, {name:"C",team:"red"}];

const grouped = people.reduce((acc, p) => {
  (acc[p.team] ??= []).push(p.name);
  return acc;
}, {});
// { red: ["A","C"], blue: ["B"] }
#32Debounce FunctionIntermediate
JavaScript
function debounce(fn, delay) {
  let timer;
  return function(...args) {
    clearTimeout(timer);
    timer = setTimeout(() => fn.apply(this, args), delay);
  };
}
// searchInput.addEventListener("input", debounce(runSearch, 300));
#33Deep Clone an ObjectIntermediate
JavaScript
const original = { a: 1, nested: { b: 2 } };
const deep = structuredClone(original);   // native deep clone, no library needed
deep.nested.b = 99;
console.log(original.nested.b);   // 2 — untouched
#34Merge Two Sorted ArraysIntermediate
JavaScript
function mergeSorted(a, b) {
  const result = [];
  let i = 0, j = 0;
  while (i < a.length && j < b.length) result.push(a[i] < b[j] ? a[i++] : b[j++]);
  return [...result, ...a.slice(i), ...b.slice(j)];
}
mergeSorted([1,3,5], [2,4,6]);   // [1,2,3,4,5,6]
#35Find Missing Number in a SequenceIntermediate
JavaScript
function findMissing(arr, n) {
  const expected = (n * (n + 1)) / 2;
  const actual = arr.reduce((a,b) => a+b, 0);
  return expected - actual;
}
findMissing([1,2,4,5], 5);   // 3
03

Advanced Programs

#36Merge SortAdvanced
JavaScript
function mergeSort(arr) {
  if (arr.length <= 1) return arr;
  const mid = Math.floor(arr.length / 2);
  const left = mergeSort(arr.slice(0, mid));
  const right = mergeSort(arr.slice(mid));
  const merged = [];
  let i = 0, j = 0;
  while (i < left.length && j < right.length) {
    merged.push(left[i] < right[j] ? left[i++] : right[j++]);
  }
  return [...merged, ...left.slice(i), ...right.slice(j)];
}
mergeSort([5,3,8,1,9]);   // [1,3,5,8,9]
#37Custom EventEmitter (OOP)Advanced
JavaScript
class EventEmitter {
  #listeners = new Map();

  on(event, fn) {
    if (!this.#listeners.has(event)) this.#listeners.set(event, []);
    this.#listeners.get(event).push(fn);
  }
  emit(event, ...args) {
    (this.#listeners.get(event) || []).forEach(fn => fn(...args));
  }
}

const bus = new EventEmitter();
bus.on("greet", name => console.log(`Hi, ${name}`));
bus.emit("greet", "Ada");   // "Hi, Ada"
#38Memoize a Function (Closures)Advanced
JavaScript
function memoize(fn) {
  const cache = new Map();
  return function(...args) {
    const key = JSON.stringify(args);
    if (cache.has(key)) return cache.get(key);   // skip recomputation
    const result = fn(...args);
    cache.set(key, result);
    return result;
  };
}
const slowSquare = n => { for (let i=0;i<1e6;i++); return n*n; };
const fastSquare = memoize(slowSquare);   // second call with same input is instant
#39Promise-Based RetryAdvanced
JavaScript
async function retry(fn, attempts = 3, delay = 500) {
  for (let i = 0; i < attempts; i++) {
    try {
      return await fn();
    } catch (err) {
      if (i === attempts - 1) throw err;
      await new Promise(r => setTimeout(r, delay));
    }
  }
}
// retry(() => fetch("/flaky-api"), 3, 1000)
#40LRU Cache (Map-Based)Advanced
JavaScript
class LRUCache {
  constructor(capacity) { this.capacity = capacity; this.map = new Map(); }

  get(key) {
    if (!this.map.has(key)) return -1;
    const val = this.map.get(key);
    this.map.delete(key);
    this.map.set(key, val);   // re-insert — Map preserves insertion order
    return val;
  }
  put(key, value) {
    if (this.map.has(key)) this.map.delete(key);
    else if (this.map.size >= this.capacity) {
      this.map.delete(this.map.keys().next().value);   // evict least recently used
    }
    this.map.set(key, value);
  }
}