Il peut se faire en utilisant Array.prototype.map
mais le tableau ne peut pas être vide. Remplir d'abord :
console.log(
Array(3).fill().map(Math.random)
);
Explication :
En new Array(3)
Le constructeur crée un tableau clairsemé (ou le réseau "holey", comme l'appelle l'équipe V8 ) comportant trois trous et d'une longueur de trois . Cela signifie qu'il est équivalent à [,,,]
qui crée [<empty>, <empty>, <empty>,]
(notez que JavaScript virgules de fin ). Notez qu'un emplacement vide, c'est-à-dire un trou, n'est pas la même chose que undefined
en tant que valeur attribuée. undefined
est une valeur réelle, alors que <empty>
n'est qu'une lacune dans le tableau.
Array.prototype.map
est appelé une fois pour chaque élément du tableau . Mais comme un tableau vide n'a pas de valeurs assignées, le rappel n'est pas appelé du tout. Par exemple, [1,,2].map(v=>v*2)
donnerait [2,,4]
; l'emplacement du milieu est ignoré, car il y a une lacune à cet endroit.
Entrer Array.prototype.fill(value, start?, end?)
avec un seul argument, il remplit chaque emplacement du tableau avec la valeur spécifiée. Techniquement, le premier paramètre n'est pas optionnel, mais en l'omettant, undefined
est utilisée comme valeur. Ce n'est pas grave, car la valeur n'est de toute façon pas utilisée. De cette manière Array(3).fill()
nous donne [undefined, undefined, undefined]
.
Maintenant que le tableau contient des valeurs, il peut être mappé, comme indiqué ci-dessus.
Vous pouvez également spread
le vide array
en valeurs de undefined
avant la mise en correspondance :
console.log(
[...Array(3)].map(Math.random)
);
Explication :
Opérateurs de tableau introduits dans ECMAScript2015 ou plus récent traiter les trous dans les tableaux comme des undefined
valeurs . Array.prototype.map
a été introduit dans ES5 (I.E. ce qui a précédé ES2015 ), où, de manière confuse, les trous dans les tableaux doivent être ignorés, ce qui crée un peu d'incohérence dans les fonctions JS Array en fonction de l'édition d'ECMAScript dans laquelle elles ont été publiées.
L'opérateur de diffusion ...
a été introduit dans ES2015 Ainsi, conformément à la spécification, il convertit tous les trous du tableau donné en valeurs de undefined
. En d'autres termes, [...Array(3)]
nous donne [undefined, undefined, undefined]
, tout comme Array(3).fill()
ci-dessus.
Il est parfois nécessaire d'introduire des nombres de manière séquentielle. Comme l'a souligné Kevin Danikowski , Array.prototype.map
vous donne cette possibilité dès le départ, puisque le deuxième paramètre est la touche actuelle :
const Fibonacci = n => Math.round(((5**.5 + 1) / 2)**n / 5**.5);
console.log(
Array(10).fill().map((_, i) => Fibonacci(++i))
);