web-dev-qa-db-fra.com

Création d'un tableau de longueur n avec des nombres aléatoires en JavaScript

Suite à cette réponse pour créer un tableau de longueur spécifiée, j’ai exécuté ce qui suit pour obtenir un résultat correspondant mais rempli de nombres aléatoires, au lieu de zéros.

var randoms = Array(4).fill(Math.floor(Math.random() * 9));

Eh bien, mathématiquement parlant c'est aléatoire, d'accord. Mais j'aimerais que le caractère aléatoire soit visible dans le tableau et pas seulement entre les exécutions, bien sûr. Ordinateur stupide ... Ne fais pas ce que je dis. Fais ce que je veux!

Je peux itérer et mettre mes valeurs aléatoires (et variables). Mais je me demande, par pure curiosité, s’il est possible d’obtenir le bon résultat avec une seule ligne, comme ci-dessus, à la manière de MatLab. Dois-je appeler eval (function () ...)? J'ai entendu beaucoup de mauvaises choses à propos de eval...

Notez que ce qui précède produit un code comme celui-ci:

[7, 7, 7, 7]
[3, 3, 3, 3]

etc. alors que je veux quelque chose comme

[1, 2, 3, 4]
[4, 3, 8, 4]

14
Konrad Viltersten
var randoms = Array(4).fill(Math.floor(Math.random() * 9));

Cette ligne de code créera une liste de 4 du même nombre car fill prend une valeur unique et la répète pour la longueur de la liste. Ce que vous voulez faire, c'est exécuter le générateur de nombres aléatoires à chaque fois:

var makeARandomNumber = function(){
    return Math.floor(Math.random() * 9);
}
var randoms = Array(5).fill(0).map(makeARandomNumber);
console.log(randoms)
// => [4, 4, 3, 2, 6]

https://jsfiddle.net/t4jtjcde/

6
Conrad.Dean

Approche ES6 courte et simple -

// randomly generated n = 4 length array 0 <= array[n] <= 9
var randoms = Array.from({length: 4}, () => Math.floor(Math.random() * 10));

Prendre plaisir!

3
simonbor

Je me demande s'il est possible d'obtenir le bon résultat avec un one-liner ...

var randoms = [...Array(4)].map(虚 => Math.floor(Math.random() * 9));

document.body.innerText = randoms;

1
7vujy0f0hy

`const t = Array.from ({length: n}, mapArrowFx);

1) const t10 = Array.from({length: 10}, (v, k) => k); [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

2) const tEven = Array.from({length: 10}, (v, k) => 2*k); [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

........

3)

let n=100; const tRandom= Array.from({length: n}, (v, k) => Math.floor(Math.random()*n)); 

...

0
user3008938