Brooke.
Brooke.

Reputation: 3731

How can I return a random value from an array?

I'm using the jQuery validate plugin, and would like to return a random value on success.

Right now I'm trying to use:

     var success_message = new Array ();
     success_message[0] = "Good!";
     success_message[1] = "Ok!";
     success_message[2] = "Great!";
     success_message[3] = "Perfect!";
     success_message[4] = "Nice!";
     success_message[5] = "Awesome"; 
     var i = Math.floor(5 * Math.random())

Then where I need to output the value I use:

 $(document).ready(function(){
     var validator = $(".contactform").validate({
        success: function(label) {
           label.addClass("valid").text(success_message[i])
        }
     }); //end form validate code
 });

This selects a random value but uses the same value for each success message instead of selecting a different one for each field.

Upvotes: 34

Views: 53425

Answers (4)

Andrew Parks
Andrew Parks

Reputation: 8087

A concise way of choosing a random element of the array is to use bitwise OR instead of Math.floor(). This works because bitwise operations will cause the fractional part of the number to be discarded, which achieves exactly the same result as Math.floor(). Operator precedence means that the bitwise operation happens after the multiplication. Doing bitwise OR with zero leaves the original number unaffected, except that now the fractional part is gone.

const arr = ["Good!", "Great!", "Awesome!", "Super!", "Nice!"]

const randomElement = arr[Math.random() * arr.length | 0]

console.log(randomElement)

Upvotes: 1

Rakesh Kumar
Rakesh Kumar

Reputation: 2853

We can add Method to Array.

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

messages.getRandomVal();

Upvotes: 7

Nick Craver
Nick Craver

Reputation: 630389

You can store the messages array and calculate the message to show as you go, like this:

var messages = ["Good!", "Great!", "Awesome!", "Super!", "Nice!"];
function getMessage() {
   return messages[Math.floor(Math.random() * messages.length)];
}

Give it a try here, then just call getMessage in your .text() call, like this:

label.addClass("valid").text(getMessage());

Upvotes: 91

Mike Sherov
Mike Sherov

Reputation: 13427

function sucess() {
 message = ["Good!","Awesome!","Super!","Nice!","Great!"];
 return message[Math.floor(Math.random() * message.length)];
}

 $(document).ready(function(){
     var validator = $(".contactform").validate({ ...
              success: function(label) {
    label.addClass("valid").text(success());
 }
      }); //end form validate code
         });

Upvotes: 5

Related Questions