116 votes

Créer un tableau avec des valeurs aléatoires

Comment créer un tableau de 40 éléments, avec des valeurs aléatoires de 0 à 39 ? Comme

 [4, 23, 7, 39, 19, 0, 9, 14, ...]

J'ai essayé d'utiliser les solutions d'ici:

http://freewebdesigntutorials.com/javaScriptTutorials/jsArrayObject/randomizeArrayElements.htm

mais le tableau que j'obtiens est très peu aléatoire. Il génère beaucoup de blocs de nombres successifs...

260voto

simonbor Points 1274

L'approche la plus courte (ES6)

 // randomly generated N = 40 length array 0 <= A[N] <= 39
Array.from({length: 40}, () => Math.floor(Math.random() * 40));

Prendre plaisir!

59voto

Phrogz Points 112337

Voici une solution qui mélange une liste de numéros uniques (aucune répétition, jamais).

 for (var a=[],i=0;i<40;++i) a[i]=i;

// http://stackoverflow.com/questions/962802#962890
function shuffle(array) {
  var tmp, current, top = array.length;
  if(top) while(--top) {
    current = Math.floor(Math.random() * (top + 1));
    tmp = array[current];
    array[current] = array[top];
    array[top] = tmp;
  }
  return array;
}

a = shuffle(a);

Si vous souhaitez autoriser des valeurs répétées (ce qui n'est pas ce que l'OP voulait), cherchez ailleurs. :)

50voto

Eugene Kulabuhov Points 126

ES5 :

 function randomArray(length, max) {
    return Array.apply(null, Array(length)).map(function() {
        return Math.round(Math.random() * max);
    });
}

ES6 :

 randomArray = (length, max) => [...new Array(length)]
    .map(() => Math.round(Math.random() * max));

38voto

Damjan Pavlica Points 7299

Approche ES6 encore plus courte :

 Array(40).fill().map(() => Math.round(Math.random() * 40))

De plus, vous pourriez avoir une fonction avec des arguments :

 const randomArray = (length, max) => 
  Array(length).fill().map(() => Math.round(Math.random() * max))

37voto

Curt Points 486

Le plus court :-)

[...Array(40)].map(e=>~~(Math.random()*40))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X