【问题标题】:Ignoring certain strings on second cycle在第二个周期忽略某些字符串
【发布时间】:2016-05-31 16:49:27
【问题描述】:

所以,我有一个数组,其中包含多个字符串。

var Array = ["mods/red1.png", "mods/red2.png", "mods/red3.png", "mods/orange1.png", "mods/orange2.png", "mods/orange3.png", "mods/blue1.png", "mods/blue2.png", "mods/blue3.png"];

我的函数随机选择一个。我需要进行设置:如果它拾取 red1,它将忽略所有带有红色的字符串,并且只会打印出橙色或蓝色中的一个。

当前代码如下所示:

var num = Math.floor(Math.random() * Array.length);
var num2 = Math.floor(Math.random() * Array.length);
     if(RedModArray[num] !== undefined){
                document.mod1.src = Array[num];
if(Array[num].indexOf("red") > -1){
document.mod2.src = Array[num2];
}

但无论我做了什么,它要么不打印任何东西,要么仍然是随机的。

mod1mod2是html中元素的名称。

【问题讨论】:

    标签: javascript arrays cycle


    【解决方案1】:

    给你的笔记;

    您只检查两个值。如果 Array[num] Array[num2] 都包含“red”,那么你就不走运了。

    您正在保存到两个不同的位置。根据您的解释,它有时“不打印任何内容”,我猜您正在打印 document.mod2.src,只有在 Array[num] 为红色时才会填充。

    要解决这些问题,您需要使用while 循环,并将最终结果存储到一个位置。

    祝你好运!

    【讨论】:

      【解决方案2】:

      您所描述的正是您的代码所做的: * 如果“不是红色”=> 打印(随机) * 如果“是红色” => 不打印任何东西

      我猜您更愿意在“红色”的情况下选择后备,例如: * 如果“是红色的” => 选择一个不同的

      var a = ["mods/red1.png", "mods/red2.png", "mods/red3.png", "mods/orange1.png", "mods/orange2.png", "mods/orange3.png", "mods/blue1.png", "mods/blue2.png", "mods/blue3.png"];
      var o1 = a[Math.floor(Math.random() * a.length)];
      var o2;
      do { o2 = a[Math.floor(Math.random() * a.length)]; }
      while (o2.indexOf("red") >= 0);
      

      由于 random() 是随机选择的,您最终可能会一遍又一遍地选择一个红色的。根据您的实际用例,甚至可能没有任何有效元素可供选择。所以我宁愿提出这样的解决方案,而不是上面的解决方案:在第一次选择之后过滤你不想要的元素。

      var o1 = a[Math.floor(Math.random() * a.length)];
      a = a.filter(function(o) { return o.indexOf('red') < 0; })
      var o2 = a[Math.floor(Math.random() * a.length)];
      

      PS:不要将变量命名为“数组”!

      【讨论】:

      • 你说得对,但我不知道应该如何将 sn-p 实现到我当前的函数中。但我想出了一个想法,我应该为每种颜色创建一个数组,随机选择一个数组,然后从该数组中选择一个字符串,如果它有意义的话。
      • 我不知道你的实际用例,所以我真的帮不上忙。如果您无法修改第二个数组,则始终可以使用第二个数组(将“a = a.filter...”替换为“b = a.filter...”,然后使用 b)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多