Skip to content

Coding practice

JavaScript Coding Questions

30 hands-on challenges with prompts and solution sketches for JavaScript interview rounds.

Challenge set

30 coding questions

1. Reverse a String

javascript

Write a function that reverses a string.

function reverseString(str) {
  return str.split("").reverse().join("");
}

2. Check Palindrome

javascript

Return true if a string is a palindrome (ignore case and non-alphanumeric).

function isPalindrome(str) {
  const clean = str.toLowerCase().replace(/[^a-z0-9]/g, "");
  return clean === clean.split("").reverse().join("");
}

3. Find Largest Number

javascript

Return the largest number in an array.

function findLargest(numbers) {
  return Math.max(...numbers);
}

4. Remove Duplicates

javascript

Remove duplicate values from an array.

function removeDuplicates(arr) {
  return [...new Set(arr)];
}

5. Count Vowels

javascript

Count vowels in a string.

function countVowels(str) {
  return str.match(/[aeiou]/gi)?.length || 0;
}

6. FizzBuzz

javascript

Print Fizz, Buzz, or FizzBuzz for multiples of 3 and 5.

function fizzBuzz(n) {
  for (let i = 1; i <= n; 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);
  }
}

7. Factorial

javascript

Compute factorial recursively.

function factorial(n) {
  if (n === 0) return 1;
  return n * factorial(n - 1);
}

8. Fibonacci

javascript

Return the first n Fibonacci numbers.

function fibonacci(n) {
  const result = [0, 1];
  for (let i = 2; i < n; i++) {
    result.push(result[i - 1] + result[i - 2]);
  }
  return result.slice(0, n);
}

9. Flatten Array

javascript

Fully flatten a nested array.

function flattenArray(arr) {
  return arr.flat(Infinity);
}

10. Deep Clone Object

javascript

Deep clone a plain object/array value.

function deepClone(value) {
  return structuredClone(value);
}

11. Debounce

javascript

Implement debounce.

function debounce(fn, delay) {
  let timer;
  return function (...args) {
    clearTimeout(timer);
    timer = setTimeout(() => fn.apply(this, args), delay);
  };
}

12. Throttle

javascript

Implement throttle.

function throttle(fn, delay) {
  let lastTime = 0;
  return function (...args) {
    const now = Date.now();
    if (now - lastTime >= delay) {
      lastTime = now;
      fn.apply(this, args);
    }
  };
}

13. Memoization

javascript

Memoize a unary function.

function memoize(fn) {
  const cache = {};
  return function (value) {
    if (cache[value] !== undefined) return cache[value];
    cache[value] = fn(value);
    return cache[value];
  };
}

14. Curry Function

javascript

Curry a simple add function.

function curryAdd(a) {
  return function (b) {
    return a + b;
  };
}

15. Group Array by Key

javascript

Group objects by a property key.

function groupBy(items, key) {
  return items.reduce((result, item) => {
    const group = item[key];
    if (!result[group]) result[group] = [];
    result[group].push(item);
    return result;
  }, {});
}

16. Custom map()

javascript

Implement Array.prototype.customMap.

Array.prototype.customMap = function (callback) {
  const result = [];
  for (let i = 0; i < this.length; i++) {
    result.push(callback(this[i], i, this));
  }
  return result;
};

17. Custom filter()

javascript

Implement Array.prototype.customFilter.

Array.prototype.customFilter = function (callback) {
  const result = [];
  for (let i = 0; i < this.length; i++) {
    if (callback(this[i], i, this)) result.push(this[i]);
  }
  return result;
};

18. Custom reduce()

javascript

Implement Array.prototype.customReduce.

Array.prototype.customReduce = function (callback, initialValue) {
  let accumulator = initialValue;
  for (let i = 0; i < this.length; i++) {
    accumulator = callback(accumulator, this[i], i, this);
  }
  return accumulator;
};

19. Promise.all Polyfill

javascript

Implement a Promise.all-like helper.

function promiseAll(promises) {
  return new Promise((resolve, reject) => {
    const results = [];
    let completed = 0;
    promises.forEach((promise, index) => {
      Promise.resolve(promise)
        .then((value) => {
          results[index] = value;
          completed++;
          if (completed === promises.length) resolve(results);
        })
        .catch(reject);
    });
  });
}

20. Event Emitter

javascript

Build a minimal EventEmitter.

class EventEmitter {
  constructor() {
    this.events = {};
  }
  on(event, callback) {
    if (!this.events[event]) this.events[event] = [];
    this.events[event].push(callback);
  }
  emit(event, data) {
    (this.events[event] || []).forEach((callback) => callback(data));
  }
}

21. Check Anagram

javascript

Check if two strings are anagrams.

function isAnagram(a, b) {
  return a.split("").sort().join("") === b.split("").sort().join("");
}

22. Capitalize Words

javascript

Capitalize the first letter of each word.

function capitalizeWords(str) {
  return str
    .split(" ")
    .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
    .join(" ");
}

23. Find Missing Number

javascript

Find the missing number from 1..n.

function findMissingNumber(arr, n) {
  const expected = (n * (n + 1)) / 2;
  const actual = arr.reduce((sum, num) => sum + num, 0);
  return expected - actual;
}

24. Count Occurrences

javascript

Count occurrences of each value.

function countOccurrences(arr) {
  return arr.reduce((result, item) => {
    result[item] = (result[item] || 0) + 1;
    return result;
  }, {});
}

25. Merge Objects

javascript

Shallow-merge two objects.

function mergeObjects(a, b) {
  return { ...a, ...b };
}

26. Safe JSON Parse

javascript

Parse JSON safely and return null on failure.

function safeJsonParse(text) {
  try {
    return JSON.parse(text);
  } catch {
    return null;
  }
}

27. Retry Async Function

javascript

Retry an async function N times.

async function retry(fn, attempts) {
  for (let i = 0; i < attempts; i++) {
    try {
      return await fn();
    } catch (error) {
      if (i === attempts - 1) throw error;
    }
  }
}

28. Timeout Promise

javascript

Create a delay promise.

function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

29. Toggle Class

javascript

Toggle an active class on an element.

function toggleActive(element) {
  element.classList.toggle("active");
}

30. Validate Email

javascript

Validate a simple email pattern.

function validateEmail(email) {
  return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
}