JQuery while循环对inArray比较变得无响应,以优化数组内容

时间:2015-07-11 22:54:13

标签: javascript jquery arrays match

我有一个使用随机过程的函数,并测试数组中的重叠。

这样的事情:

它需要一系列颜色并随机选取其中两个并将它们放入一个新数组中。 然后它测试这两种颜色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中是不可行的?

1 个答案:

答案 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计算之前重置此项会修复此问题。

请注意,checksumoptimise_colours()的初始值为-1,以便让while循环至少运行一次。

希望如果有人遇到类似问题,这会有所帮助。