1

geojson次の構造のファイルがあります。

var areas = {
"type": "FeatureCollection",                                                                                
"features": [
{ "type": "Feature", "id": 0, "properties": { "name": "a", "count": "854" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.271687552328165, 29.359549285088008 ], [ 13.272222904657671, 29.357697459147403 ], [ 13.272586765837973, 29.35566049412985 ], [ 13.273062097784726, 29.354438105832578 ], [ 13.272652418199639, 29.360795108476978 ], [ 13.271320041078822, 29.360700647951568 ], [ 13.271687552328165, 29.359549285088008 ] ] ] } }
,
{ "type": "Feature", "id": 1, "properties": { "name": "b", "count": "254"}, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.277038163109875, 29.358442424220023 ], [ 13.276782949188294, 29.358122923383512 ], [ 13.275290999273452, 29.358508600578681 ], [ 13.274634727185679, 29.358485484466968 ], [ 13.282581930993208, 29.358635779719847 ], [ 13.278334024184868, 29.359814295404375 ], [ 13.277038163109875, 29.358442424220023 ] ] ] } }
,
{ "type": "Feature", "id": 2, "properties": {"name": "c", "count": "385"}, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.279484097462499, 29.349831113628788 ], [ 13.27792879702741, 29.349728966688758 ], [ 13.276089401418951, 29.349901260351807 ], [ 13.275677565886326, 29.349951087700632 ], [ 13.279484097462499, 29.349831113628788 ] ] ] } }
,
{ "type": "Feature", "id": 3, "properties": { "name": "d", "count": "243"}, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.290520299215724, 29.352306689134622 ], [ 13.289722088408338, 29.351802774685929 ], [ 13.289065241087885, 29.352101541350635 ], [ 13.28785814146197, 29.351114667998772 ],  [ 13.290520299215724, 29.352306689134622 ] ] ] } }

]
}

通常、このデータを配列に変換するには、この値を配列に格納する適切な変数を実行するループを作成します。ただし、これが最善のアプローチであるかどうかはわかりません。id最終的に次のようになるように、すべての値を配列に引き出す方法はありますか?

[0,1,2,3]

外部ライブラリを使用してこれを行うこともできます。現在のアプローチよりも効率的な方法があるかどうかに主に興味があります。

4

3 に答える 3

1

何か他のものを試してみたいと切望している場合は、アンダースコアの mapを試すことができます。コードは次のようになります。

_.map(areas.features, function (item) { return item.id });

これにより、フィーチャ内の各アイテムに対して内部関数が呼び出され、各結果を含む配列が返されます。

ここでできることは極端すぎるとは思いません。最終的には、入れ子になったオブジェクトや配列から値を引き出すことは、それほど馬鹿げたことではありません。

于 2012-10-04T18:17:23.680 に答える
1

私のコードではありませんが、非常に効率的にjsonから値を取得することに関する投稿があります。

JSON オブジェクトで jQuery の find() を使用する投稿を参照してください

User Box9 からの回答がおそらく最良の方法です

function getObjects(obj, key, val) {
    var objects = [];
    for (var i in obj) {
        if (!obj.hasOwnProperty(i)) continue;
        if (typeof obj[i] == 'object') {
            objects = objects.concat(getObjects(obj[i], key, val));
        } else if (i == key && obj[key] == val) {
            objects.push(obj);
        }
    }
    return objects;
}

このコードブロックに関してもこの回答に賛成票を投じました。これは、値を引き出すために私が見つけた最良の方法に関するものだからです

于 2012-10-04T18:17:40.380 に答える
1

このようなものが動作するはずです:

    var arr = new Array();
    for(var i = 0; i < areas.features.length; i++){
        arr.push(areas.features[i].id)
    }    

特定のid値を直接取得するには、次のようにします。

areas.features[0].id

この場合は になります0

于 2012-10-04T18:18:00.413 に答える