First, `isLt100`, `isDivBy3` and your other functions are vaguely named. Better name them fully and meaningfully. There's no harm done with the extra keystrokes in the name. Also, you would want to make your range flexible. Now, as far as I know, functional programming fans prefer a "range" function to iterate through. Since there's no such thing in JS, [this SO answer provides us one][1]. It's essentially just creating an array of `n` length. Next is your fizzbuzz. Since we have an array of numbers thanks to `range`, all we need to do now is just replace those with numbers, fizz, buzz or fizz buzz. We can use the native `map` array method to do that. Your other functions are a bit verbose, so I just collapsed them into a simple ternary. I kept the division functions because they were used more than once. <!-- begin snippet: js hide: false --> <!-- language: lang-js --> function range(n){ return Array.apply(null, Array(n)).map(function (_, i) {return i;}); } function isDivisibleByThree(n){ return n % 3 === 0; } function isDivisibleByFive(n){ return n % 5 === 0; } function fizzBuzz(n){ return isDivisibleByThree(number) && isDivisibleByFive(number) ? 'fizz buzz' : isDivisibleByThree(number) ? 'fizz' : isDivisibleByFive(number) ? 'buzz' : number; } var fizzBuzzArray = range(100).map(function(index){ return fizzBuzz(index + 1); }); // A non-OOP approach would have the same thing like the following // fizzBuzzArray = map(lambda x: fizzBuzz(x + 1), range(100)); document.write(fizzBuzzArray.join(',')); <!-- end snippet --> [1]: http://stackoverflow.com/a/10050831/575527