2011-01-22 49 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