我有一个使用随机过程的函数,并测试数组中的重叠。
这样的事情:
它需要一系列颜色并随机选取其中两个并将它们放入一个新数组中。
然后它测试这两种颜色new_array
的新数组是否有重叠(即我们是否没有两种不同的颜色)。此测试将返回的inArray()
索引求和,以便在没有重叠时返回0
,如果有则返回-1
。
function test_overlap() {
window.overlap_output = [];
var all_colours = ["red", "red", "black", "red", "red", "red", "red", "red", "red"];
var random_index1 = 1 + Math.floor(Math.random() * 8);
var random_index2 = 1 + Math.floor(Math.random() * 8);
var new_array = [all_colours[random_index1], all_colours[random_index2]];
$.each(new_array, function(i, val) {
var overlap_test = $.inArray(val, new_array);
overlap_output.push(overlap_test - i);
});
$.each(overlap_output, function() {
checksum += this;
});
}
这就像我想要的那样。但是,我现在希望将其自动化为优化,因为它在checksum
值为0
之前尽可能长时间地运行此函数。换句话说,直到我有两种不同颜色的数组。
我想在新功能中使用while
执行此操作:
function optimise_colours() {
window.checksum = -1;
while (checksum !== 0){
test_overlap();
}
}
在此,我声明checksum
要在while
循环中使用,然后想要在结果不是所需的0
时运行它。
但是,如果我运行optimise_colours()
- 除非它得到完美的"数组最初 - 浏览器遇到麻烦,因为它需要太长时间并返回"无响应的脚本"。
我的问题是:有没有办法解决我的问题,我在代码逻辑中犯了错误,或者这在JavaScript / JQuery中是不可行的?
答案 0 :(得分:0)
如果有人遇到类似的问题:我的错误在于我的代码逻辑,我怀疑。
在我的while循环中,checksum
函数的test_overlap()
在每次运行时都会变得更负。在重新汇总checksum
索引之前,我必须插入一行,将0
值重置为inArray()
:
function test_overlap() {
window.overlap_output = [];
var all_colours = ["red", "red", "black", "red", "red", "red", "red", "red", "red"];
var random_index1 = 1 + Math.floor(Math.random() * 8);
var random_index2 = 1 + Math.floor(Math.random() * 8);
var new_array = [all_colours[random_index1], all_colours[random_index2]];
$.each(new_array, function(i, val) {
var overlap_test = $.inArray(val, new_array);
overlap_output.push(overlap_test - i);
});
#here I need to reset the checksum value to zero
checksum = 0;
$.each(overlap_output, function() {
checksum += this;
});
}
如果不重置该值,则会发生这种情况:它会运行test_overlap()
并返回负值checksum
,因为存在重叠。然后校验和值从-1
减少到-2
。这不是应该满足的条件,因此请保持while
循环并再次运行:
现在出现了问题:无论第二次运行test_overlap()
的结果如何,它最初收到的校验和值为-2
,即使返回的结果为此次运行为0
(即没有重叠),该值可能无法更改为0
。
在每次checksum
计算之前重置此项会修复此问题。
请注意,checksum
中optimise_colours()
的初始值为-1
,以便让while循环至少运行一次。
希望如果有人遇到类似问题,这会有所帮助。