2013-03-13 47 views
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]; 
} 
+0

...和你的問題是什麼? – zzzzBov 2013-03-13 21:01:22

+2

inArray返回索引0-n,如果找不到,則返回-1;如果不是,則不能簡單地將其作爲真/假使用 – 2013-03-13 21:01:22

+2

您需要執行if(jQuery.inArray(i,tCounter) !== -1)' – Mahn 2013-03-13 21:01:32

回答

1

在我目前的實現中可以看到兩個錯誤。

首先,你for循環索引似乎是一個關。在目前的狀態下,它不會檢查12號的存在(由於您的條件爲i<12)。

其次,你的if聲明實際計算結果爲false時,它應該是真實的。如果數組中的索引爲0,(在Javascript中計算爲0),則應輸入語句。以你有什麼我會重寫代碼如下:

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漂亮的試驗證實了我的懷疑。

+0

是的,你說得對,「t」應該是「term」。非常感謝你的幫助,我真的很感激!我一直對javascript數組持懷疑態度,因此瞭解更多關於它們的信息真是太棒了!我肯定會把它切換到indexOf(),因爲越快越好。 – trice 2013-03-14 13:28:05

+0

沒問題,樂於幫忙! – Jlange 2013-03-14 17:46:07

0

一個天真的解決方案是從1-12迭代並檢查數組中是否存在該值。像這樣:

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

term = i;