Select 来自 2 个数组的随机整数,直到条件为真

Select random Integers from 2 arrays until condition is true

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

在下面的例子中有两个数组,一个比另一个大。 较大的数组包含潜在的除数,较小的数组包含除数。 我希望函数一直计算,直到它找到一对可以整除而没有余数的被除数和除数。

示例:

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" 函数或构造的东西?

感谢您的帮助! 文

你所说的"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
    };
};

编辑: 之后,只需用整个数组调用 randomMatch()

alert(randomMatch(listDivident, listDivisor));

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

var pairs = [];

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

result = _.shuffle(pairs)[0];