2017-01-18 5 views
0

オブジェクトの緯度と経度の距離がユーザーの選択範囲内にあるかどうかを調べるために、配列内のオブジェクトを検索するフィルタがあります。しかし問題は、オブジェクトの中には緯度と経度の属性がまったくないことが原因で、これによってフィルタが壊れてしまうことです。緯度と経度がない場合は、オブジェクトを「スキップ」する方法はありますか?またはその緯度と経度が0の場合angularjs欠けている属性がある場合はスキップする

コード:

function distanceFromFunc(distanceFrom) { 

     var m; 
     var n; 
     var positionContainer = []; 
     var docLat; 
     var docLon; 
     var rowIdFromObj; 
     var rowObj; 
     var rowsArray; 

     if (distanceFrom === "1") { 
     vm.selectedRadius = 1609.344 //1 mile 
     } else if (distanceFrom === "2") { 
     vm.selectedRadius = 3218.688 //2 miles 
     } else if (distanceFrom === "5") { 
     vm.selectedRadius = 8046.720 //5 miles 
     } else if (distanceFrom === "10") { 
     vm.selectedRadius = 16093.440 //10 miles 
     } else if (distanceFrom === "20") { 
     vm.selectedRadius = 32186.880 //20 miles 
     } else if (distanceFrom === "50") { 
     vm.selectedRadius = 80467.200 //50 miles 
     } else if (distanceFrom === "999999") { 
     vm.selectedRadius = 0 
     }; 

     //THE PROBLEM HERE IS THAT WHEN IT HITS A RECORD WITHOUT LAT AND LONG 
     //THE FUNCTION BREAKS 
     function filterByDist(value) { 
     console.log("VALUE IS ------>" + JSON.stringify(value)); 
     var dist = distance(myLat, myLon, value.locations[0].Lat, value.locations[0].Long); 
     if (dist <= distanceFrom) { 
      console.log("the dist is: " + dist); 
      return value 
     }; 
     }; 

     var digestedArray = originalData2.filter(filterByDist) 
     $scope.locatorGridData = digestedArray; 

    }; //end func 

私はそれがこの行に壊れ信じ:var dist = distance(myLat, myLon, value.locations[0].Lat, value.locations[0].Long);

答えて

1

だけであることが、問題の行を変更することができなければならない:

var dist; 
if (value.locations && value.locations.length && 
    value.locations[0].Lat && value.locations[0].Long){ 
    dist = distance(myLat, myLon, value.locations[0].Lat, value.locations[0].Long); 
} 
1

あなたは距離メソッド呼び出し作る前にチェックの少しだけ:

function filterByDist(value) { 
    if (value.locations[0].Lat && value.locations[0].Long) { 
    var dist = distance(myLat, myLon, value.locations[0].Lat, value.locations[0].Long); 
    if (dist <= distanceFrom) { 
     return value 
    } 
    } 
} 

ことを前提としていエラーはあなたが思うところで発生します、ofc!しかし、そこに誤りがあると思われます。

1

次のコードか否かをチェック:

  • valuevalue.locationsが定義されている

  • LatLongが存在します

距離は、これらの条件が満たされている場合にのみ計算されます。

if(value && value.locations.length && value.locations[0].Lat && value.locations[0].Long) { 
    // Calculate distance 
} 
関連する問題