Maison  >  Questions et réponses  >  le corps du texte

javascript - js traverse des tableaux bidimensionnels pour obtenir des nombres aléatoires. Comment obtenir des nombres aléatoires moyens ?

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中文网2663 Il y a quelques jours1478

répondre à tous(2)je répondrai

  • 伊谢尔伦

    伊谢尔伦2017-07-05 11:09:26

    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.

    répondre
    0
  • 天蓬老师

    天蓬老师2017-07-05 11:09:26

    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]
      ]
    }

    répondre
    0
  • Annulerrépondre