0

I'm trying to populate a 2D array in javascript with random numbers. Although each column in the array is random, each row is identical which is not what I want (see image below). I want both rows and columns to be random.

http://eeldesigns.com/image.jpg

cols = 5;
rows = 10;

front = new Array(cols).fill(new Array(rows));

// Loop through Initial array to randomly place cells
for(var x = 0; x < cols; x++){
  for(var y = 0; y < rows; y++){
    front[x][y] = Math.floor(Math.random()*5);
  }
}
console.table(front) ;
2

3 Answers 3

2

One way of doing this using map

let op = new Array(10)
         .fill(0)
         .map(e=>(new Array(5)
         .fill(0)
         .map(e=> Math.floor(Math.random() * 5))))

console.log(op)

Sign up to request clarification or add additional context in comments.

2 Comments

thanks for the tip - I wasn't familiar with maps and their usage.
@Ismail always happy to help :) you can read about map on given link in answer.
1

The trouble is that you're not initializing the row. It's easily fixed:

cols = 5;
rows = 10;

front = new Array(cols)// .fill(new Array(rows));

// Loop through Initial array to randomly place cells
for(var x = 0; x < cols; x++){
  front[x] = [];  // ***** Added this line *****
  for(var y = 0; y < rows; y++){
    front[x][y] = Math.floor(Math.random()*5);
  }
}
console.table(front) ; // browser console only, not StackOverflow's

Update

This is a cleaner version, somewhat similar to the one from Code Maniac, but simplified a bit:

const randomTable = (rows, cols) => Array.from(
  {length: rows}, 
  () => Array.from({length: cols}, () => Math.floor(Math.random() * 5))
)

console.table(randomTable(10, 5)) // browser console only, not StackOverflow's

5 Comments

Thanks this was exactly what I was looking for.
Just a quick question - does not the 'new Array()' initalise the row?
Note that although this shows where you went wrong, the answer from Code Maniac is a better solution.
No, and I should have commented that out before. You're passing one value to fill, which is used to fill all the rows with the same empty array. That's one reason the other answer is cleaner.
Added a cleaner version.
0

This can be accomplished using a combination of Array.prototype.fill() and Array.prototype.map():

new Array(rows).fill([]).map(x => Array(columns).fill(0).map(x => x + Math.floor(Math.random() * (max - min)) + min));

For example, we can create a 100 by 964 column array full of random numbers between 900 and 1000 using the following:

new Array(100).fill([]).map(x => Array(964).fill(0).map(x => x + Math.floor(Math.random() * (1000 - 900)) + 900));

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.