1

我正在使用一个只能包含 12 个值的数组;1 到 12。这些值可以以任何顺序存在。我需要遍历数组并找到第一个未使用的值,然后将其设置为变量。

例如,如果数组包含值 [1, 7, 2, 5, 10],我想将变量设置为 3,因为它是按数字顺序排列的第一个未使用的数字。我正在使用 jQuery 1.9.1 和 jQuery UI 1.10.1,但如果这可以用普通的 javascript 解决,那也很好!

下面是我的代码,我知道这是错误的,因为它总是将变量设置为 1。 注意:tCounter 是一个用于多个函数的全局数组,所以我不想在这里修改内容。这就是我创建 tArray 来拼接值的原因。谢谢你的帮助!

var i;
var t;
var tArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];

for (i = 1; i < 12; i++) {
    if (jQuery.inArray(i, tCounter)) {
        tArray.splice($.inArray(i, tArray), 1);
    }
}

if (tArray.length <= 0) {
    term = 1;
} else {
    term = tArray[0];
}
4

2 回答 2

1

在您当前的实现中,我可以看到两个错误。

首先,您的for循环索引似乎是一次性的。在当前状态下,它不会检查数字 12 的存在(由于您的条件i<12)。

其次,当你的if陈述应该为真时,它实际上评估为假。如果数组中的索引为 0,(Javascript 中 0 的计算结果为 false),则应输入语句。拿你所拥有的我会重写你的代码如下:

  var i;
  var t; //this isn't used, perhaps it should be 'term'?

  for (i = 1; i < 13; i++) {
     // if we find a number that isn't in tCounter, we exit the loop.
     if (jQuery.inArray(i, tCounter) === -1) {
         term = i;
         break;
     }

     //sets term to null if all numbers are present in array.
     term = null;
  }

如果您的值不是数字 1-12 而是任意数字,那么您将值从数组中拼接出来的想法会很好地工作,但实际上,您根本不需要 var tArray。

旁注:在一个有趣的比较中,如果您正在寻找可能的最快实现,您应该使用tCounter.indexOf(i)而不是jQuery.inArray(i, tCounter),我不确定哪个更快,但是这个漂亮的测试证实了我的怀疑。

于 2013-03-13T21:41:03.897 回答
0

一个简单的解决方案是从 1-12 迭代并检查数组中是否存在该值。像这样:

var i;
for(i=1; i<12; i+=1) {
   if (tArray.indexOf(i) === -1) break;
}

term = i;
于 2013-03-13T21:02:37.913 回答