2012-06-27 19 views
1

我有一個稱爲「數據」的大型數組。檢查值存在於數組中的位置

在第10陣列的位置,我有這個在其數據值:

[10] => 1,2 

現在什麼我嘗試在JS做的是這樣的:

i = 1; 
if(i in data[10]){ 
    //great success, very nice! 
} 

我想逗號分隔的數據可能像「IN」方法的數組一樣,但它不起作用。我得到這個錯誤:

Uncaught TypeError: Cannot use 'in' operator to search for '1' in 1,2 

什麼是我的問題的正確解決方案?

+0

位置10處的數據a ** string **的值爲「1,2」還是**數組**,值爲[1,2]? – carlosfigueira

+0

我不知道如何檢查,因爲我解析它從一個PHP文件與JSON ENCODE – Sir

+0

@Dave,如果你是從JSON解析,那麼它將是一個字符串。我將更新我的示例代碼,向您展示如何訪問各個數組元素。 – Sim

回答

4

您不會顯示您如何將1,2分配到data[10]的代碼。您可以從在JavaScript shell /控制檯中執行以下內容中看到,1,2的值僅爲2。有關逗號運算符的工作方式,請參見reference

但是,您收到的錯誤消息表明您有字符串"1,2"。把它變成一個數組,你應該使用split()爲:

> data[10] = "1,2" 
1,2 
> data[10].split(',') 
[ "1", "2" ] 

遍歷值,你可以使用in運營商對所得到的數組中:

var data = new Array(); 
data[10] = '1,2'; 
var valueArray = data[10].split(','); 
for (var i in valueArray) { 
    alert('valueArray[' + i + '] is ' + valueArray[i]); 
} 

您可以運行此在瀏覽器中的控制檯和alert將顯示出兩個消息你:

  • valueArray [0]爲1
  • valueArray [1]是2

請注意,在循環開始之前,您不需要初始化iin運算符將自動執行此操作。另外,最好在上面的代碼中使用局部變量var i

另一方面,如果你是JS的新手,但你需要處理大量的數據結構操作,值得學習underscore.js。特別要看看​​。下劃線可以幫你避免編寫大量的循環邏輯。

但是,如果您想要進行會員資格檢查,那麼您需要使用不是in而是Array.indexOf()。請參閱http://jsfiddle.net/nRS9m以獲取評論中您的jsfiddle分支的示例。更多例子:

> valueArray 
[ "1", "2" ] 
> valueArray.indexOf("3") 
-1 
> valueArray.indexOf("1") 
0 
> valueArray.indexOf("2") 
1 
> valueArray.indexOf(1) 
-1 
> valueArray.indexOf((1).toString()) 
0 
+0

1,2的值不是2.你在這一行上做的是給數據[10]賦值1,然後評估2的值 - 這是顯然是2.如果你已經檢查了數據的輸出[10],你應該得到1.我承認雖然這是因爲代碼格式不正確,引擎盡力解析它。 – nbrooks

+0

@nbrooks,spot on:逗號運算符的優先級較低。我已經更新了答案。 – Sim

+0

其實我不認爲這是一個javascript _operator_。 JavaScript控制檯的輸出只是上次執行的操作返回的值。因此1,2輸出2仍然只是返回評估值2的值。 – nbrooks

相關問題