Хитрый Javascript: как получить значение из JSON DICT внутри массива внутри DICT :) - PullRequest
3 голосов
/ 04 февраля 2010

У меня есть json-файл, включенный в мой javascript, который определяет переменную, которая выглядит следующим образом:

var places_json = { 
 "count": 13476, 
 "places": [
      {"area": "London", "county": "STS", "lat": 52.300151820000004, "lon": -2.36665606, "code": "7567", "id": 1}, 
      {"area": "Sheffield", "county": "STS", "lat": 51.33648680000003, "lon": 0.98861179000000001, "code": "9919", "id": 6}, 
      {"area": "Huxton", "county": "STS", "lat": 53.27483902, "lon": -1.0146250700000001, "code": "9953", "id": 11}, 
 ]}

И я хочу получить значение area для записи, для которой id равно 11, используя Javascript.

Кто-нибудь знает, как это сделать? Это слишком сложно для меня - мой Javascript не настолько продвинут. Если бы я знал индекс массива нужной мне записи, я мог бы сделать:

var entry = json_places.places[i] 

но я не знаю, к сожалению, только значение id (которое уникально).

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 04 февраля 2010
function findAreaById(placesArray, id) {    
    var place = null;
    for (var i = 0, length = placesArray.length; i < length; i++) {
        place = placesArray[i]; 
        if (place.id === id) {
            return place.area;
        }
    }
    return null;
}
1 голос
/ 04 февраля 2010

Просто прокрутите свои места, чтобы найти нужный элемент.

var area = null;
for(var i = 0; i < json_places.places.length; i++) {
  if(json_places.places[i].id == 11) {
    area = json_places.places[i].area;
    break;
  }
}

alert(area);

Если вы хотите, чтобы функция делала это для вас, вы можете выполнить следующее:

json_places.get_place = function(id) {
   return (function(id) {
             for(var i = 0; i < this.places.length; i++) {
               if(this.places[i].id == id) {
                 return this.places[i];
               }
             }

             return null;
           }).apply(json_places, id);
}

ЗатемВы можете просто сделать следующее:

alert(json_places.get_place(11).area);
0 голосов
/ 04 февраля 2010

Использование jQuery (даже если на этот вопрос дан достаточный ответ):

var area = null;
$.each(places_json.places, function() {
    if(this.id == 11) {
        alert("Area is " + this.area);
        area = this.area;
        return false;
    }
});

См .:

http://api.jquery.com/jQuery.each/

0 голосов
/ 04 февраля 2010
function get_area(places_json, id) {
    for (var i = 0; i < places_json.places.length; i++) {
        if (places_json.places[i].id === id) {
            return places_json.places[i].area;
        }
    }
}

Также, если вы знаете, что у вас есть JavaScript 1.5 (или вы не против вставить код в https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter ...), и особенно если вы знаете LINQ:

function get_area(places_json, id) {
    return places_json.places.filter(function (place) { place.id === id; })[0].area;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...