2011-01-22 51 views
3

我試圖比較從websockets流入的json數據。如何從數組中選擇

一個這樣的數組會工作得很好:

["stream","apple","orange"] 

但數組的數組沒有這麼好:

[["stream","apple","orange"],["stream","pear","kiwi"],["stream","apple","juice"]] 

任何幫助將不勝感激。提前致謝!

function handler(jsonString) { 

    var json = jQuery.parseJSON(jsonString); 

    if (json[0] == "blah") { 
     //Do something 
    } 

    else if (json[0] == "blah2") { 
     //Do something else 
    } 

} 

回答

3

要從外[0]該內陣列的第一引用,然後使用相同的方括號中,參考在該內陣列[0][1]的項目。

if (json[0][0] == "blah") { 
    //Do something 
} 
else if (json[0][1] == "blah2") { 
    //Do something else 
} 

所以下面的例子會產生這樣的:

json[0][0]; // "stream" 
json[0][1]; // "apple" 

json[1][0]; // "stream" 
json[1][1]; // "pear" 

// etc... 

要遍歷數組中對所有的項目,你需要一個循環內循環。外部迭代遍歷存儲在外部數組中的數組,內部循環遍歷這些內部數組的值。

像這樣:

for(var i = 0, len_i = json.length; i < len_i; i++) { 
    for(var j = 0, len_j = json[ i ].length; j < len_j; j++) { 
     // do something with json[ i ][ j ]; (the value in the inner Array) 
    } 
} 

,或者如果你想jQuery.each()(docs)

jQuery.each(json, function(i,val) { 
    jQuery.each(val, function(j,val_j) { 
     // do something with val_j (the value in the inner Array) 
    }); 
}); 

我寧願在for循環雖然。

+0

謝謝帕特里克。這工作! – DrEval

+0

我試圖找到最好的方式來遍歷數組的數組,並將每個綁定到一個變量 ,我可以用它來替換頁面上的數據。我應該使用$ .each這種類型的功能嗎? 否則如果(JSON [0] [0] == 「流」){// 做別的事情 爲(VAR I = 0;我 DrEval

+0

@DrEval:你需要在循環內部做一個循環。是的,你可以使用'$ .each',或者只是一個簡單的'for'循環。雖然我不確定爲什麼你會想要一堆變量。 Array存儲機制旨在*防止*需要多個變量。它是爲了所有的價值嗎?或者只是某些?我會舉一個循環的例子。 – user113716