在angularjs中找到数组中的最小值

时间:2015-04-08 06:42:22

标签: javascript angularjs google-maps

我正试图在map.SO中显示最近的分支位置。我想得到当前位置和分支位置之间差异最小的分支。我已经采取了这样的差异。

for(var i=0;i<$scope.locations.BranchAndAtms.length;i++){
                var mapObject = $scope.locations.BranchAndAtms[i];

                var differenceLat = (mapObject.lat - c.latitude);
                var differenceLon = (mapObject.lon - c.longitude);

                var Difference = (differenceLat + differenceLon);
                alert(Difference );

现在我得到了我的array.how中每个分支之间的差异,以获得差异最小的值。

注意:我得到的差异有负值和正值。

2 个答案:

答案 0 :(得分:0)

在for循环之外,您将要声明一个变量,该变量将跟踪哪个数组索引具有最低值,另一个变量用于当前最低值。默认情况下,它会将第一个项目存储为最低 - 如果您的数组中只有一个项目,这会派上用场。

var lowest_index = 0;
var lowest_value = 0;

在for循环中,您需要获取差异的绝对值。

for... 
var differenceLat = Math.abs(mapObject.lat - c.latitude);
var differenceLon = Math.abs(mapObject.lon - c .longitude);

现在,将现有的最低值与当前值进行比较,如果当前值较低,请将lowest设置为i的值。

if(Difference < lowest_value) {
  lowest_index = i;
  lowest_value = Difference;
}

所以,您的代码应如下所示:

var lowest_index = 0;
var lowest_value = 0;

for(var i=0;i<$scope.locations.BranchAndAtms.length;i++){
                var mapObject = $scope.locations.BranchAndAtms[i];

                var differenceLat = Math.abs(mapObject.lat - c.latitude);
                var differenceLon = Math.abs(mapObject.lon - c.longitude);

                var Difference = (differenceLat + differenceLon);

                if(Difference < lowest_value) {
                  lowest_index = i;
                  lowest_value = Difference;
                }
}

答案 1 :(得分:0)

除了Steve的回答之外,我建议您查看如何正确计算位置之间的距离:Calculate distance between two latitude-longitude points? (Haversine formula)

因此,创建一个计算距离的函数:

function calculateDistance(currentLocation, branchLocation) {
  /* the actual implementation, use answers from
   * https://stackoverflow.com/questions/27928/ as reference 
   *
   * Note that if you want, you could also use the actual latitude 
   * and longitude values as parameters for this function:
   * calculateDistance(currentLat, currentLon, branchLat, branchLon)
   */
  return distance;
}

然后在for-loop中使用它而不是当前的差值计算:

var Difference = calculateDistance(c, mapObject);
// or if you want to have the separate latitude and longitude parameters:
// var Difference = calculateDistance(c.latitude, c.longitude, mapObject.lat, mapObject.lon);

否则史蒂夫的方法是有效的。

(如果您希望显示给定距离内的所有分支位置,或者如果有多个分支具有完全相同的距离,则显示所有最近的分支位置,您需要存储距离并按它们排序。但这不属于主题,因为你只想显示一个分支位置。)