javascript - js traverse des tableaux bidimensionnels pour obtenir des nombres aléatoires. Comment obtenir des nombres aléatoires moyens ?
PHP中文网
PHP中文网 2017-07-05 11:07:26
0
2
1506

Il existe un tableau bidimensionnel, comment le couper (non adjacent au haut, au bas, à gauche et à droite) pour obtenir 2 ou 3 nombres aléatoires ?

Tableau :

var a = [
    [0, 1],
    [2, 3],
    [4, 5],
    [6, 7]
];

J'en ai écrit un comme celui-ci, mais cela semble très rigide, les nombres obtenus ne sont pas égaux et le code est un peu gonflé. Quelqu'un a-t-il une meilleure solution ?

function select() {
    var a = [
        [0, 1],
        [2, 3],
        [4, 5],
        [6, 7]
    ];

    var lastSelect = -1;

    for (var i = 0; i < a.length; i++) {

        var index = getRandomNumber(lastSelect, a[i].length);

        console.log(a[i][index]);

        lastSelect = index;
    }

}

function getRandomNumber(lastSelect, max) {

    var random = Math.floor(Math.random() * max);

    if (random == lastSelect) return getRandomNumber(lastSelect, max);

    else return random;

}

select()
PHP中文网
PHP中文网

认证0级讲师

répondre à tous(2)
伊谢尔伦

La condition est que le haut, le bas, la gauche et la droite ne soient pas adjacents. En supposant que la coordonnée du point de départ est (0,0), alors les points suivants (-1, 0), (0, -1), (1, 0), (0, 1) sont masqués. Les caractéristiques de ces points sont : la valeur absolue de x plus la valeur absolue de y est égale à 1. Coordonnez aléatoirement les valeurs x et y dans une plage raisonnable et ajoutez les valeurs absolues de chacune. Si elle n'est pas égale à 1 et que cette coordonnée n'a pas été prise auparavant, c'est légal.

Peter_Zhu

Voici une idée de hack très simple mais tout à fait satisfaisante, qui consiste à [prendre les nombres en croix] pour atteindre l'exigence [le haut, le bas, la gauche et la droite ne sont pas adjacents] Cela ne nécessite que deux lignes :

function pick (arr) {
  // 若数组长度为 5,则该下标 x 的范围为 1~3
  // 直接依次取 a[x - 1], a[x], a[x + 1] 中交错的项即可
  // 为了保证不越界而根据数组长度限制 x 取值范围
  const pickedIndex = Math.max(
    0, parseInt(Math.random() * arr.length - 2)
  ) + 1
  // 第二维下标交错着 0 1 取值,达到数字不相交的需求
  return [
    arr[pickedIndex - 1][0],
    arr[pickedIndex][1],
    arr[pickedIndex + 1][0]
  ]
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal