2015-02-05 2 views
1

У меня проблема с получением объектов в массиве. В моем случае у меня есть файл JSON с объектом и его идентификаторами. Я хочу получить объект, найдя его идентификатор. Поэтому я хочу получить Objekt (101 и 103) для дальнейших вычислений. (В C++ это будет карта, а затем итерация до 101 будет найдена и возвращена.) В Javascript я получил эту ошибку: «TypeError: region [i] [103] undefined». Я не знаю, что случилось. Или есть лучший способ получить объект по его идентификатору?Получить объект, указанный в массиве

Вот пример кода:

<!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 regions = {" 101 ": {" name ": ...," pop ": ...}," 102 ": {" name " : ..., "pop" ...} 'Вы можете конденсировать' foo() 'to' document.getElementById ("results"). innerHTML = regions ["101"] ["name"] + "//" + регионов ["103"] ["name"]; ' – Andreas

+0

oke спасибо вам приятное решение, если у вас есть данные в этой структуре! – Manuel

+0

okey я получил это :) – Manuel

ответ

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

wow очень умное решение !!! Спасибо m8 – Manuel

1

Если вы наблюдаете ваше для цикла

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

Вы пытаетесь к идентификатор обработки «103» для i = 0; 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

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 объектамиID, и я хочу рассчитать объектный ID 345 и 678, который будет проблемой – Manuel

Смежные вопросы