Passar por números claramente é um trabalho para um loop. E selecionar o que imprimir é um assunto da execução condicional. Lembre-se que o truque de usar o operador restante % para checar se um número é divisível por outro número (tem resto zero).
A segunda versão do programa pode ser resolvida de forma simples (apenas adicionando outro "ramo" que precisamente testa a condição dada), ou de forma mais inteligente (construindo uma cadeia de caracteres contendo a palavra para saída, e imprimindo esta palavra ou o número, se não houver palavra, potencialmente fazendo uso do elegante operador ||).
let number = 1; while (number <= 100) { if ((number % 3 == 0) && (number % 5 == 0)) {//imprimi FizzBuzz se os numeros são divisíveis por 3 e 5. console.log('FizzBuzz'); } else if ((number % 3) == 0) {//imprimi Fizz se o número for divisível por 3. console.log('Fizz'); } else if ((number % 5) == 0) {//imprimi Buzz se o número for divisível por 5. console.log('Buzz'); } else {//imprimi os números que NÃO são divisíveis por 3 e 5. console.log(number); } number++; }