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