棘手的Javascript:如何从dict内的json dict数组中检索值:)

棘手的Javascript:如何从dict内的json dict数组中检索值:),javascript,json,Javascript,Json,我的javascript中包含一个json文件,它定义了一个如下所示的变量: var places_json = { "count": 13476, "places": [{ "area": "London", "county": "STS", "lat": 52.300151820000004, "lon": -2.36665606, "code": "7567", "id": 1 }, {

我的javascript中包含一个json文件,它定义了一个如下所示的变量:

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
    },
  ]
}
我想使用Javascript为
id
为11的条目检索
area
的值

有人知道怎么做吗?这对我来说太难了——我的Javascript没有那么高级。如果我知道我需要的条目的数组索引,那么我可以执行以下操作:

var entry = json_places.places[i] 
但我不知道,不幸的是,只知道id的值(它是唯一的)


提前感谢。

只需在您的位置循环查找合适的物品即可

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);
函数findAreaById(placesArray,id){
var-place=null;
对于(var i=0,length=placesArray.length;i
使用(即使此问题已得到充分回答):

见:


您是否在使用JS库?不,只使用javascript(尽管我可以添加一个,如果其他方法无法实现),这是绝对可能的,正如您在下面的答案中所看到的。我只是想问一下,这样我就可以提供一个答案,使用库而不是一般的JSUse
for in
来处理散列,而不是数组。这是个坏习惯@安东尼·米尔斯:在数组中使用
没有什么错。
ECMA-262
12.6.4
节规定,其
[[Enumerable]]
属性为true的任何对象都可以在该循环中使用。数组符合条件。为所有答案欢呼。选择这一个是因为它第一次完美地工作了&用于内联代码和函数的组合。谢谢@Andrew,在
中为…使用
是可行的,但它非常慢,因此通常被认为是一种不好的做法。@Andrew,另外,
中为…公开添加到
数组.原型
数组
实例的任何内容。
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);
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;
        }
    }
}
function get_area(places_json, id) {
    return places_json.places.filter(function (place) { place.id === id; })[0].area;
}
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;
}
var area = null;
$.each(places_json.places, function() {
    if(this.id == 11) {
        alert("Area is " + this.area);
        area = this.area;
        return false;
    }
});