2015-02-05 93 views
1

我有一個問題需要獲取數組中的對象。 在我的情況下,我有一個帶有對象和ID的JSON文件。我想通過查找它的ID來獲得對象。所以我想要得到Objekt(101和103)作進一步的計算。 (在C++中它將是一個映射,然後迭代直到找到101並返回。)在Javascript中,我得到了該錯誤: 「TypeError:region [i] [103]未定義」。我不知道什麼是錯的。還是有更好的方法來通過它的ID獲得一個對象?獲取數組中的對象

這裏是一個代碼示例:

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
<title>Unbenanntes Dokument</title> 
</head> 

<body> 

<div id="results"></div> 

<script> 
var region = [ 
    { 
    "101": { 
    "id":101, 
    "name":"Eisenstadt(Stadt)", 
    "pop":13485, 
    "lat":47.845876, 
    "lng":16.518073, 
    "FIELD6":"", 
    "FIELD7":"" } 
    }, 
    { 
    "102": { 
    "id":102, 
    "name":"Rust(Stadt)", 
    "pop":1942, 
    "lat":47.803858, 
    "lng":16.686788, 
    "FIELD6":"", 
    "FIELD7":"" } 
    }, 
    { 
    "103": { 
    "id":103, 
    "name":"Eisenstadt-Umgebung", 
    "pop":41474, 
    "lat":47.85458, 
    "lng":16.576139, 
    "FIELD6":"", 
    "FIELD7":"" } 
    } 
    ] 

function foo(region) 
{ 
    for(i=0; i<region.length;i++) 
{ 

    document.getElementById("results").innerHTML = region[i]["101"]["name"] + " // " + region[i]["103"]["name"]; 
} 
} 

foo(region); 

    </script> 
</body> 
</html> 
+1

你可以改變'regions'的結構? 'var「= {」101「:{」name「:...,」pop「:...},」102「:{」name「 :...,「pop」...}'您可以將'foo()'壓縮到'document.getElementById(「results」)。innerHTML = regions [「101」] [「name」] +「//」 +地區[「103」] [「名稱」];' – Andreas 2015-02-05 20:18:00

+0

oke謝謝你很好的解決方案,如果你有在該結構的數據! – Manuel 2015-02-05 20:33:07

+0

okey我明白了:) – Manuel 2015-02-05 21:56:12

回答

1

試試這個

function foo(region) { 
    function getPropertyByKeys(region, keys, prop) { 
    return region.filter(function(el) { 
     return keys.indexOf(Object.keys(el).pop()) >= 0; 
    }).map(function(el) { 
     return el[Object.keys(el).pop()][prop]; 
    }) 
    } 

    document.getElementById('results').innerHTML = getPropertyByKeys(region, ['101', '103'], 'name').join(' // '); 
} 

Example

+0

哇很聰明的解決方案!謝謝m8 – Manuel 2015-02-05 20:50:18

1

如果你觀察你的for循環

for(i=0; i<region.length;i++) 
{ 
    document.getElementById("results").innerHTML = region[i]["101"]["name"] + 
    " // " + region[i]["103"]["name"]; 
} 

您嘗試將爲i = 0獲得id「103」; ID「103」不存在,所以你得到TypeError

你可以使用對象枚舉(遍歷對象屬性),就像這樣:

function foo(region) { 
    var name = ''; 
    for(var i = 0; i < region.length; i++) { 
    for(var o in region[i]) { 
     if (region[i].hasOwnProperty(o)) { 
     //check for o[id] == 101? 
     name += region[i][o]['name']; 
     } 
    }  
    } 
    document.getElementById("results").innerHTML = name; 
} 

foo(region); 
+0

感謝您的評論!這是一個好主意,但我想從「101」拉特,從103拉特或145拉特拉。我想說的區域[「102]」顯示您的屬性(lat.lng等...)然後我想計算對象101和對象1xx。 – Manuel 2015-02-05 20:47:31

0

試試這個:

<!doctype html> 
 
<html> 
 
<head> 
 
<meta charset="utf-8"> 
 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
<title>Unbenanntes Dokument</title> 
 
</head> 
 
    <body> 
 
     
 
<div id="results"></div> 
 

 
<script> 
 
var region = [ 
 
    { 
 
    "101": { 
 
    "id":101, 
 
    "name":"Eisenstadt(Stadt)", 
 
    "pop":13485, 
 
    "lat":47.845876, 
 
    "lng":16.518073, 
 
    "FIELD6":"", 
 
    "FIELD7":"" } 
 
    }, 
 
    { 
 
    "102": { 
 
    "id":102, 
 
    "name":"Rust(Stadt)", 
 
    "pop":1942, 
 
    "lat":47.803858, 
 
    "lng":16.686788, 
 
    "FIELD6":"", 
 
    "FIELD7":"" } 
 
    }, 
 
    { 
 
    "103": { 
 
    "id":103, 
 
    "name":"Eisenstadt-Umgebung", 
 
    "pop":41474, 
 
    "lat":47.85458, 
 
    "lng":16.576139, 
 
    "FIELD6":"", 
 
    "FIELD7":"" } 
 
    } 
 
    ] 
 

 
function foo(region) 
 
{ 
 
    for(i=0; i<region.length;i++) 
 
{ 
 

 
    document.getElementById("results").innerHTML = region[i]["101"]["name"] + " // " + region[(i+2)]["103"]["name"]; 
 
    
 
} 
 
} 
 

 
foo(region); 
 

 
    </script> 
 
    </body> 
 
</html>

+0

謝謝你,我知道這樣做,但輸出不是動態的。如果我有800個objectsIDs的文檔,我想計算objectID 345和678這將是一個問題 – Manuel 2015-02-05 20:25:56