Javascript 从2个数组中选择随机整数,直到条件为真
我想知道编写一个函数的最有效方法是什么,它接受两个随机整数数组,并在找到一对匹配整数时终止 在下面的示例中,有两个数组,一个比另一个大。 较大的数组包含潜在的除数,较小的数组包含除数。 我想让函数计算,直到找到一对无余数可除的除数和除数 例如:Javascript 从2个数组中选择随机整数,直到条件为真,javascript,underscore.js,lodash,Javascript,Underscore.js,Lodash,我想知道编写一个函数的最有效方法是什么,它接受两个随机整数数组,并在找到一对匹配整数时终止 在下面的示例中,有两个数组,一个比另一个大。 较大的数组包含潜在的除数,较小的数组包含除数。 我想让函数计算,直到找到一对无余数可除的除数和除数 例如: var listDivident = _.shuffle(_.range(1, 101)); var listDivisor = _.shufle(_.range(1, 11)); randomMatch = function (listDividen
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中是否有类似于“直到”的函数或构造
谢谢你的帮助!
Vin您所谓的“直到”可以通过循环来实现,直到找到您需要的:
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
};
};
除非数组非常大,否则只需先生成所有有效对,然后随机选取一对:
var pairs = [];
_.each(listDivident, function(a) {
_.each(listDivisor, function(b) {
if(!(a % b))
pairs.push([a, b])
})
});
result = _.shuffle(pairs)[0];
不要想“一直做XXX直到…”,而要想“还没做,继续”。你需要一个
While
循环。谢谢我使用了\示例(成对)
作为结果,因此它更简短:)谢谢您丰富的答案!我将坚持格奥尔格的回答,因为它是短的倾斜。
var pairs = [];
_.each(listDivident, function(a) {
_.each(listDivisor, function(b) {
if(!(a % b))
pairs.push([a, b])
})
});
result = _.shuffle(pairs)[0];