从2个数组中随机选择整数,直到condition为真

Select random Integers from 2 arrays until condition is true

本文关键字:直到 condition 为真 整数 选择 2个 数组 随机      更新时间:2023-09-26

我想知道写一个函数的最有效的方法是什么,它接受两个随机整数数组,并在找到一对匹配的整数时终止。

在下面的例子中,有两个数组,一个比另一个大。较大的数组包含可能的被除数,较小的数组包含可能的除数。我想让这个函数一直计算,直到找到一对可除且无余数的被除数和被除数。

的例子:

var listDivident = _.shuffle(_.range(1, 101));
var listDivisor = _.shufle(_.range(1, 11));
randomMatch = function (listDivident, listDivisor) {
   /* until ((listDivident % listDivisor !== "undefined") 
      && (listDivident % listDivisor === 0) {
        ...
      }
   */
    return {
        matchDivident: matchDivident,
        matchDivisor: matchDivisor
    };
};

在JS中是否有类似于"until"函数或结构的东西?

谢谢你的帮助!Vin

除非您的数组非常大,否则您可以简单地先生成所有有效的对,然后随机选择一个:

var pairs = [];
_.each(listDivident, function(a) {
    _.each(listDivisor, function(b) {
        if(!(a % b))
            pairs.push([a, b])
    })
});
result = _.shuffle(pairs)[0];

你可以通过循环until找到你需要的东西来实现你所说的"until":

var listDivident = _.shuffle(_.range(1, 101));
var listDivisor = _.shufle(_.range(1, 11));
randomMatch = function (listDivident, listDivisor) {
    var i = 0,
        found = false,
        dividentLength = listDivident.length,
        divisorLength = listDivisor.length,
        matchDivident = null,
        matchDivisor = null;
    while (!found && i < dividentLength && i < divisorLength) {
        if (listDivident[i] % listDivisor[i] === 0) {
            matchDivident = listDivident[i];
            matchDivisor = listDivisor[i];
            found = true;
        } else {
            i++;
        }
    }
    return {
        matchDivident: matchDivident,
        matchDivisor: matchDivisor
    };
};

EDIT:之后,用整个数组调用randomMatch():

alert(randomMatch(listDivident, listDivisor));