maneira funcional de iterar acima do intervalo (ES6 / 7) [duplicado]

Esta pergunta já tem uma resposta aqui:

Existe um mecanismo para fazer um loop x vezes no ES6 (ECMAScript 6) sem variáveis mutáveis? 15 respostas

Qual é a melhor maneira de fazer o abaixo de maneira mais funcional (com ES6 / ES7)

let cols = [];
for (let i =0; i <= 7; i++) {
   cols.push(i * i);
}
return cols;

Eu tentei assim,

return [ ...7 ].map(i => {
  return i * i;
});

mas isso traduzido para

[].concat(7).map(function (n) {
  return n * n;
});

o que não é o que eu esperava.

EDITAR:

@pavlo. Na verdade, isso foi um erro. Eu estava usando JSX e, por exemplo, quero 7 divs (não testadas)

let cols = [];
    for (let i =0; i <= 7; i++) {
       cols.push(<div id={i}> ...  </div>)
    }
    return cols;

então a idéia era de fato reduzir o número de variáveis temporárias e a sensação de procedimento.

questionAnswers(3)

yourAnswerToTheQuestion