javascript数组和/或jquery $ .inArray()和.splice()

时间:2013-03-13 20:59:34

标签: javascript jquery arrays

我正在处理一个只能有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];
}

2 个答案:

答案 0 :(得分:1)

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

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

其次,当if语句应该为真时,它实际上会计算为false。如果数组中的索引为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),我不是确定哪个更快,但this漂亮的测试证实了我的怀疑。

答案 1 :(得分:0)

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

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

term = i;