Print numbers 1..n, but for multiples of 3 print 'Fizz', multiples of 5 print 'Buzz', and multiples of both print 'FizzBuzz'.
The classic screening question. Check divisibility by 15 first (or build the string incrementally), because a naive 3-then-5 ordering that returns early misses the FizzBuzz case.
function fizzBuzz(n) {
const out = [];
for (let i = 1; i <= n; i++) {
let s = '';
if (i % 3 === 0) s += 'Fizz';
if (i % 5 === 0) s += 'Buzz';
out.push(s || String(i));
}
return out;
}FizzBuzz filters candidates who cannot translate simple rules into code; the elegant version shows you avoid redundant branches.
A candidate writes if (i%3===0) 'Fizz' else if (i%5===0) 'Buzz' else i — 15 prints 'Fizz' not 'FizzBuzz'. Fix it.