Estoy tratando de establecer algunas coordenadas aleatorias en un mapa. Escribí la línea console.log para ver si elegía números con éxito, pero me dice que todo en mi matriz destinations es NaN.

Parece que está asignando la función Math.random a la variable en lugar de llamar a Math.random y darle el número que devuelve. Alguien sabe que pasa?

var nodeCount = 10
var mapSize = 100;

var destinations = new Array(nodeCount);
for (var i = 0; i < nodeCount; i++) {
    destinations[i] = new Array(2);
}

var generateDestinations = function(nodeCount) {
    for (var i=0; i<nodeCount; i++) {
        destinations[i][0] = Math.floor(Math.random*mapSize); //sets x-coord
        destinations[i][1] = Math.floor(Math.random*mapSize); //sets y-coord
        console.log(destinations);
    }
};
generateDestinations(nodeCount);
0
ajHurliman 29 ago. 2014 a las 07:24

2 respuestas

La mejor respuesta

Math.random() es una función, por lo que debe invocarse con el operador de llamada:

Math.floor(Math.random() * mapSize);
//                    ^^

Lo mismo ocurre con la línea debajo de ella.


Además, puede usar la sintaxis literal de la matriz en lugar de llamar al constructor. Es mucho más limpio y más expresivo:

var destinations = [];
for (var i = 0; i < nodeCount; i++) {
    destinations[i] = [];
}
2
0x499602D2 29 ago. 2014 a las 03:28

http://www.w3schools.com/jsref/jsref_random.asp

Intente esto, parece que está definiendo un valor máximo pero no un mínimo (supongo que desea un número entre 0 y mapSize)

    //                         \/ max value
    Math.floor((Math.random()*mapSize) + 0);
    //                                   /\ min value

También Math.random es una función por lo que su

Math.random()
0
Ian Wise 29 ago. 2014 a las 03:50