2008-09-17 99 views
0

如果我有以下幾點:Javascript數組引用

{"hdrs": ["Make","Model","Year"], 
"data" : [ 
    {"Make":"Honda","Model":"Accord","Year":"2008"} 
    {"Make":"Toyota","Model":"Corolla","Year":"2008"} 
    {"Make":"Honda","Model":"Pilot","Year":"2008"}] 
} 

而且我有一個「HDRS」域名(即「做」),我怎麼可以參考data陣列實例? 好像data["Make"][0]應該工作...但無法獲得正確的參考

編輯

很抱歉的不確定性。我可以遍歷hdrs讓每個HDR的名字,但我需要使用各實例值hdrs找到data中的所有數據元素(不確定這是否更好解釋)。我會把它在一個變量t,因爲它是JSON(欣賞重新標記),我希望能夠與這樣的引用:t.data[hdrs[i]][j]

+0

你在數據數組中的數組值之間缺少逗號。 – Jared 2008-09-17 19:50:43

+0

非常感謝您的幫助..我改變了帖子的名稱並弄亂了語法,再次感謝 – 2008-09-17 20:40:01

回答

3

我不得不改變你的代碼一點點:

var x = {"hdrs": ["Make","Model","Year"], 
     "data" : [ 
      {"Make":"Honda","Model":"Accord","Year":"2008"}, 
      {"Make":"Toyota","Model":"Corolla","Year":"2008"}, 
      {"Make":"Honda","Model":"Pilot","Year":"2008"}] 
     }; 

     alert(x.data[0].Make); 

編輯:在回答您的編輯

var x = {"hdrs": ["Make","Model","Year"], 
     "data" : [ 
      {"Make":"Honda","Model":"Accord","Year":"2008"}, 
      {"Make":"Toyota","Model":"Corolla","Year":"2008"}, 
      {"Make":"Honda","Model":"Pilot","Year":"2008"}] 
     }; 
var Header = 0; // Make 
for(var i = 0; i <= x.data.length - 1; i++) 
{ 
    alert(x.data[i][x.hdrs[Header]]); 
}   
0

也許嘗試數據[0]。使

0

關閉,你會用

var x = data[0].Make; 
var z = data[0].Model; 
var y = data[0].Year; 
1

那麼,像這樣?

var theMap = /* the stuff you posted */; 
var someHdr = "Make"; 
var whichIndex = 0; 
var correspondingData = theMap["data"][whichIndex][someHdr]; 

這應該工作,如果我理解正確,你......

1
var x = {"hdrs": ["Make","Model","Year"], 
"data" : [ 
    {"Make":"Honda","Model":"Accord","Year":"2008"} 
    {"Make":"Toyota","Model":"Corolla","Year":"2008"} 
    {"Make":"Honda","Model":"Pilot","Year":"2008"}] 
}; 

x.data[0].Make == "Honda" 
x['data'][0]['Make'] == "Honda" 

你有喲ur array/hash lookup backwards :)

0

您顯示的代碼在語法上不正確;它需要一些逗號。我得到這個工作:

$foo = {"hdrs": ["Make","Model","Year"], 
"data" : [ 
    {"Make":"Honda","Model":"Accord","Year":"2008"}, 
    {"Make":"Toyota","Model":"Corolla","Year":"2008"}, 
    {"Make":"Honda","Model":"Pilot","Year":"2008"}] 
}; 

,然後我可以作爲訪問數據:

$foo["data"][0]["make"] 
+0

感謝您的回覆,您對這些逗號是正確的,我更改了帖子的名稱並搞砸了語法 – 2008-09-17 20:38:35

1

第一,你忘了你的尾隨逗號數據數組項。

嘗試以下操作:

var obj_hash = { 
    "hdrs": ["Make","Model","Year"], 
    "data" : [ 
     {"Make":"Honda","Model":"Accord","Year":"2008"}, 
     {"Make":"Toyota","Model":"Corolla","Year":"2008"}, 
     {"Make":"Honda","Model":"Pilot","Year":"2008"}, 
    ] 
};

var ref_data = obj_hash.data;

alert(ref_data[0].Make);

@Kent弗雷德裏克:注意最後一個逗號並不是必需的,但可以讓你更輕鬆地左右(移動線即,如果移動或最後一行之後添加,並它沒有逗號,你必須特別記得添加一個,我認爲最好總是有尾隨逗號。)

1

我不確定我理解你的問題,但是......

假設上述JSON是VAR OBJ,你想:

obj.data[0]["Make"] // == "Honda" 

如果你只是想引用由第一頭所引用的領域,這將是這樣的:

obj.data[0][obj.hdrs[0]] // == "Honda" 
0

隨着答案的幫助(並得到正確的內外循環之後)我得到這個工作:

var t = eval("(" + request + ")") ; 
for (var i = 0; i < t.data.length; i++) { 
myTable += "<tr>"; 
for (var j = 0; j < t.hdrs.length; j++) { 
    myTable += "<td>" ; 
    if (t.data[i][t.hdrs[j]] == "") {myTable += "&nbsp;" ; } 
    else { myTable += t.data[i][t.hdrs[j]] ; } 
    myTable += "</td>"; 
} 
myTable += "</tr>"; 
}