我希望有人可以帮我完成以下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.
答案 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
的回调中依赖副作用。这意味着您不需要将元素推送到数组中,因为它们是从数据构建的。