javascript - JS kreuzt zweidimensionale Arrays, um Zufallszahlen zu erhalten.
PHP中文网
PHP中文网 2017-07-05 11:07:26
0
2
1529

Es gibt ein zweidimensionales Array. Wie kann man es schneiden (nicht neben oben, unten, links und rechts), um 2 oder 3 Zufallszahlen zu erhalten?

Array:

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

Ich habe so etwas geschrieben, aber es fühlt sich sehr starr an, die erhaltenen Zahlen sind nicht gerade und der Code ist etwas aufgebläht. Hat jemand eine bessere Lösung?

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级讲师

Antworte allen(2)
伊谢尔伦

条件是上下左右不相邻。假设起始点坐标为(0,0),那么屏蔽以下点(-1, 0), (0, -1), (1, 0), (0, 1)。这些点的特性是:x的绝对值加y的绝对值等于1。在合理范围内随机x,y坐标的值并各取绝对值相加,如果不等于1且之前没有取过这个坐标即为合法。

Peter_Zhu

这里提供一种非常简单但完全满足需求的 hack 思路,即故意【交叉着取数】,来达到【上下左右不相邻】的需求,只需两行:

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]
  ]
}
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage