0

ammap を使用して線を描画しようとしていますが、始点と終点の座標の配列を生成するのに行き詰まっています。以下に示すように、キーとして case_study を持つ json 配列を使用する必要があります

var data = {
  "countries_involved": [
    {"c_id": 6, "country": "India", "longitude": "21", "latitude": "78.0000", "involvement": 3, "case_study": 4},
    {"c_id": 7, "country": "Canada", "longitude": "62", "latitude": "105.3809", "involvement": 3, "case_study": 4}, 
    {"c_id": 8, "country": "Comoros", "longitude": "12", "latitude": "44.2333", "involvement": 1, "case_study": 5},
    {"c_id": 9, "country": "Madagascar", "longitude": "20", "latitude": "47.0000", "involvement": 1, "case_study": 5},
    {"c_id": 10, "country": "Mauritius", "longitude": "20", "latitude": "57.5000", "involvement": 1, "case_study": 5}
  ],
  "country_details": [
    {"name": "Kenya", "longitude": "-1", "latitude": "36.8000", "case_study": 4},
    {"name": "Kenya", "longitude": "-1", "latitude": "36.8000", "case_study": 5}
  ]
};

次の形式でデータを返すためにjqueryフィルターを使用しています

{longitudes: [country_details.longitude,countries_involved.longitude], latitudes: [country_details.latitude,countries_involved.latitude],}

これがforループ内の私の関数です

for (var i = 0; i < data.country_details.length; i++)
{
  var obj = {
    id: data.country_details[i]['name'].replace(/\s+/g, ''),
    color: "#000000",
    svgPath: targetSVG,
    title: data.country_details[i]['country'],
    latitude: data.country_details[i]['longitude'],
    longitude: data.country_details[i]['latitude'],
    scale: 1.5,
    zoomLevel: 2.74,
    lines: data.countries_involved.filter(function(involved) {
      return involved.case_study === data.country_details[i].case_study
    }).map(function(item) {
      return {latitudes: [data.country_details[i].latitude, item.latitude], longitudes: [data.country_details[i].longitude, item.longitude]}
    })
  };
}

ただし、始点のみを意味し、終点を意味しない配列のみを取得し、item.latitude評価しitem.longitudeていません。誰でも助けてもらえますか?

4

1 に答える 1

2

コードのこの部分内:

data.countries_involved.filter(function(involved){
    return involved.case_study === data.country_details[i].case_study
}).map(function(item){
    return {
        latitudes: [data.country_details[i].latitude, item.latitude], 
        longitudes: [data.country_details[i].longitude, item.longitude]
    };
});

変数 'i' が定義されていません。

組み込みの JavaScript 配列 'map' および 'filter' 関数の場合、反復しているコレクション内のインデックスが2 番目のパラメーターとして渡されると思います。したがって、次の 2 行で 2 番目の引数として 'i' を宣言します。

data.countries_involved.filter(function(involved, i){
// and:
}).map(function(item, i){

編集: Array.prototype.map と Array.prototype.filter は、すべてのブラウザーで使用できるわけではありません。代わりに jQuery マップとフィルターを使用するには、次のようにします。

$($.grep(data.countries_involved, function(involved){
    return involved.case_study === data.country_details[i].case_study
})).map(function(idx, item){
    return {
        latitudes: [data.country_details[i].latitude, item.latitude], 
        longitudes: [data.country_details[i].longitude, item.longitude]
    };
}).get()
于 2013-10-17T19:57:46.580 に答える