web-dev-qa-db-fra.com

Obtenir un élément aléatoire du tableau JavaScript

var items = Array(523,3452,334,31,...5346);

Comment puis-je obtenir un élément aléatoire de items?

781
James
var item = items[Math.floor(Math.random()*items.length)];
1703
Kelly

Si vous devez réellement utiliser jQuery pour résoudre ce problème:

(function($) {
    $.Rand = function(arg) {
        if ($.isArray(arg)) {
            return arg[$.Rand(arg.length)];
        } else if (typeof arg === "number") {
            return Math.floor(Math.random() * arg);
        } else {
            return 4;  // chosen by fair dice roll
        }
    };
})(jQuery);

var items = [523, 3452, 334, 31, ..., 5346];
var item = jQuery.Rand(items);

Ce plugin renverra un élément aléatoire si un tableau ou une valeur de [0 .. n) est attribué à un nombre, ou toute autre valeur, une valeur aléatoire garantie!

Pour plus de plaisir, le retour du tableau est généré en appelant la fonction de manière récursive en fonction de la longueur du tableau :)

Démo de travail à http://jsfiddle.net/2eyQX/

97
Alnitak

Utilisez le trait de soulignement (ou loDash :)):

var randomArray = [
   '#cc0000','#00cc00', '#0000cc'
];

// use _.sample
var randomElement = _.sample(randomArray);

// manually use _.random
var randomElement = randomArray[_.random(randomArray.length-1)];

Ou pour mélanger un tableau entier:

// use underscore's shuffle function
var firstRandomElement = _.shuffle(randomArray)[0];
91
chim

1. Solution: définir le prototype du tablea

Array.prototype.random = function () {
  return this[Math.floor((Math.random()*this.length))];
}

cela fonctionnera sur les tableaux en ligne

[2,3,5].random()

et bien sûr des tableaux prédéfinis

list = [2,3,5]
list.random()

2. solution: définit une fonction personnalisée qui accepte une liste et renvoie un élément

get_random = function (list) {
  return list[Math.floor((Math.random()*list.length))];
} 

get_random([2,3,5])
40
dux
var random = items[Math.floor(Math.random()*items.length)]
37
Rocket Hazmat

Voici encore un autre moyen:

function Rand(items) {
    return items[~~(items.length * Math.random())];
}
31
K-Gun

jQuery est JavaScript! C'est juste un framework JavaScript. Donc, pour trouver un élément au hasard, utilisez simplement du vieux JavaScript, par exemple,

var randomItem = items[Math.floor(Math.random()*items.length)]
14
planetjones
var rndval=items[Math.floor(Math.random()*items.length)];
11
Blindy
var items = Array(523,3452,334,31,...5346);

function Rand(min, max) {
  var offset = min;
  var range = (max - min) + 1;

  var randomNumber = Math.floor( Math.random() * range) + offset;
  return randomNumber;
}


randomNumber = Rand(0, items.length - 1);

randomItem = items[randomNumber];

crédit:

Fonction Javascript: Générateur de nombres aléatoires

8
neebz
// 1. Random shuffle items
items.sort(function() {return 0.5 - Math.random()})

// 2. Get first item
var item = items[0]

Plus court:

var item = items.sort(function() {return 0.5 - Math.random()})[0];
7
Ivan

Si vous utilisez node.js, vous pouvez utiliser unique-random-array . Il choisit simplement quelque chose de aléatoire dans un tableau.

5
Aayan L
const ArrayRandomModule = {
  // get random item from array
  random: function (array) {
    return array[Math.random() * array.length | 0];
  },

  // [mutate]: extract from given array a random item
  pick: function (array, i) {
    return array.splice(i >= 0 ? i : Math.random() * array.length | 0, 1)[0];
  },

  // [mutate]: shuffle the given array
  shuffle: function (array) {
    for (var i = array.length; i > 0; --i)
      array.Push(array.splice(Math.random() * i | 0, 1)[0]);
    return array;
  }
}
2
Nicolas

Une autre solution serait d’ajouter une méthode au prototype Array:

 Array.prototype.random = function (length) {
       return this[Math.floor((Math.random()*length))];
 }

 var teams = ['patriots', 'colts', 'jets', 'texans', 'ravens', 'broncos']
 var chosen_team = teams.random(teams.length)
 alert(chosen_team)
1
James Daly