getJson并推入数组

时间:2015-02-21 10:52:57

标签: jquery

我希望有人可以帮我完成以下getJson来电。我想检索埋在features.attributes.NAME下的所有名字。参见示例json

  {
    "objectIdFieldName": "FID",   
    "globalIdFieldName": "",
    "geometryType": "esriGeometryPolygon",
    "spatialReference": {},
    "fields": [],
    "features": [
        {
            "attributes": {
                "NAME": "ST. JOHNS"
            }
        },
        {
            "attributes": {
                "NAME": "HAYDEN ISLAND"
            }
        }
    ]
}

使用jquery我正在尝试这样的事情来创建一个空白数组并将名称推入其中。

$.getJSON("url/myjson", function(data) {
    items = [];
    $.each( data, function(i) {
        items.push(data.features.attributes.NAME);
    });
});

我现在得到的错误是Cannot read property 'NAME' of undefined.

2 个答案:

答案 0 :(得分:3)

您需要使用以下内容:

var items = []; // empty array
$.each( data.features, function(index, value) {
  items.push(value.attributes.NAME);
});

每个函数的第一个参数需要是一个数组。您将整个对象传递给它,包含字段objectIdFieldName等等。我已将其更改为仅传递features-array。

下一个问题是你提供的回调。它有两个参数:索引和值。 Index是当前循环的数量。值是您要访问的数据。

然后我也适当地更改了items.push-call。

答案 1 :(得分:0)

问题是$.each会将第一个参数作为类似数组的对象。从data返回的getJSON是您的对象,而不是数组。

执行以下操作

var items = $.map(data.features, function (i) {
    return i.attributes.NAME;
});
console.log(items);

生成[ "ST. JOHNS", "HAYDEN ISLAND" ]

通过使用each,这样可以避免在map的回调中依赖副作用。这意味着您不需要将元素推送到数组中,因为它们是从数据构建的。