Bradley William Elko
Bradley William Elko

Reputation: 364

JavaScript: Why am I getting an undefined value while using random numbers from an array?

I am using Javascript to set a element's background image in from a class. The code works for the most part, but I get a undefined variable when I run the code. I am using Math.Random() to get the numbers for the variables. The problem point in my code (or at least I think it is):

var RandomContentDiv = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 
var cd = RandomContentDiv[Math.round(Math.random()*RandomContentDiv.length-1)];
console.log(cd);

I put console.log(cd); to see what numbers are being outputted. I get results, but the results are not useful in solving the problem. I will test run the code 2 times to show you what I would typically get.

Test 1:

Number: 5
Number: 13
Number: 10
Number: 1
Number: 10
Number: 6
Number: 10
Number: 3
Number: 2
Number: 15
Number: 2
Number: 3
Number: 8
Number: 15
Number: 12
Number: 7
Number: 9
Number: 2
Number: 0
Number: 8
Number: 10
Number: 3
Number: 14
Number: 13
Number: 9
Number: 1
Number: 15
Number: 13
Number: 3
Number: 2
Number: 4
Number: 14
Number: 11
Number: 0
Number: 15
Number: 7
Number: 6
Number: 1
Number: 4
Number: 7
Number: 8
Number: 6
Number: 7
Number: 4
Number: 10
Number: 0
Number: 12
Number: 11
Number: 2
Number: 7
Number: 2
Number: 11
Number: 13
Number: 6
Number: 0
Number: 5
Number: 1
Number: 2
Number: 7
Number: 8
Number: 2
Number: 13
Number: 4
Number: 3
Number: 7
Number: 15
Number: 5
Number: 1
Number: 0
Number: 2
Number: 11
Number: 8
Number: 10
Number: 12
Number: 11
Number: 1
Number: 12
Number: 11
Number: 12
Number: 0
Number: 6
Number: 8
Number: 1
Number: 11
Number: 1
Number: 12
Number: undefined

Test 2:

Number: 13
Number: 2
Number: 9
Number: 0
Number: 2
Number: 0
Number: 11
Number: 3
Number: 5
Number: 3
Number: 11
Number: 3
Number: 14
Number: 15
Number: 9
Number: 8
Number: 11
Number: 12
Number: 10
Number: 3
Number: 9
Number: 0
Number: undefined

I think the problem is coming from this statement: RandomContentDiv[Math.round(Math.random()*RandomContentDiv.length-1)];, but I don't know how to fix it because I haven't dove deep enough in Math for JavaScript. All I know is that someone said something about Math.Round giving you an inaccurate number when rounded (i.e 1.5 could round to 1), but I don't think that it applies to this. Can anyone tell me if it is the statement that is causing the problem or something else?

Upvotes: 3

Views: 2465

Answers (1)

Tim Holt
Tim Holt

Reputation: 3173

It's the way you are calculating the index to the RandomContentDiv array.

Your code has this where you're getting the number that is coming out undefined in the console...

cd = RandomContentDiv[Math.round(Math.random()*RandomContentDiv.length-1)];

Sometimes Math.random() gives you a very small number close to zero, and that translates into you trying to access RandomContentDiv[-1], which is undefined.

Take a look at the example getRandomInt function at https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random. It is an example of how you should randomly select an integer between 0 and RandomContentDiv.length-1.

Upvotes: 1

Related Questions