2017-02-08 66 views
1

我有一張CItyDistance表:CIty1Id | City2Id |距離(KM), 現在在我的項目中,我收到2個城市的ID,我想檢查是否存在這兩個城市的計算距離。Angular.js在給定屬性中搜索數組中的匹配對象

所以無論誰是City1或City2都無所謂,我需要檢查兩個選項。 我發現檢查它的方式太長而且雜亂。 任何人都可以提供替代? (請檢查Plunker例:https://plnkr.co/edit/nzB8zy0034LqJFgL8qk7?p=preview

$scope.CompanyCity = { Id: 59, Name: 'berline' }; 

$scope.result = ""; 

$scope.distances = [ 
{city1: 59,city2: 1, Distance: 50 }, 
{city1: 1, city2: 58, Distance: 80 }, 
{city1: 3, city2: 59, Distance: 25 }, 
{city1: 4, city2: 1, Distance: 120 }]; 


$scope.findDistance = function(studentCityID) { 
    angular.forEach($scope.distances, function(value, key) { 
     if (value.city1 == studentCityID && value.city2 == $scope.CompanyCity.Id) { 
      $scope.result = value.Distance; 
     } 
     else if (value.city2 == studentCityID && value.city1 == $scope.CompanyCity.Id) { 
      $scope.result = value.Distance; 
     } 
    }); 
}; 
$scope.findDistance(1); 
+0

檢查我的答案,將工作按照您的期望。 –

回答

2

你可以試試這個,用你的$scope.findDistance函數代替你,我認爲它有更少的代碼和有效的方法來實現你的要求

$scope.findDistance = function(studentCityID) { 
    angular.forEach($scope.distances, function(value, key) { 
     var arr = Object.values(value); 
     if(arr.indexOf(studentCityID) !== -1 && arr.indexOf($scope.CompanyCity.Id) !== -1) { 
       $scope.result = value.Distance; 
     } 
    }); 
}; 

新增plunker,https://plnkr.co/edit/3r3intufeiqc26kzcnca?p=preview

謝謝,祝您好運:)的

+0

不錯,我試過使用IndexOf但沒有成功,這是一個不錯的方法,如果沒有更好的方式建議我會使用這個,謝謝 – tomersss2

+0

@LifeLess不客氣。 :) –

+0

那麼,你的代碼有一個缺陷,如果距離類似於Id的你想找的1呢?它可以通過:arr.splice(2,1)來解決。但是,謝謝,我會接受這個答案,因爲它是最短的 – tomersss2

0

我想你已經實現是因爲JSON結構的精細所有我可以建議低於

$scope.findDistance = function(studentCityID) { 
    for (var count=0; count<$scope.distances.length; count++) { 
     if (($scope.distances[count].city1 == studentCityID && $scope.distances[count].city2 == $scope.CompanyCity.Id) || 
      ($scope.distances[count].city2 == studentCityID && $scope.distances[count].city1 == $scope.CompanyCity.Id)) { 
      $scope.result = $scope.distances[count].Distance; 
      break; 
     } 
    } 
}; 

代碼請讓我知道,如果它幫助!

+0

這比以上更加凌亂:) – MMK

+0

是的,但是當你有大量的數據時,比上面更高效。 –

0

以下方法&運算符使用優化代碼:

  • 使用陣列filter()方法遍歷數組並創建一個新的數組,其中包含通過所提供函數實現的測試的所有元素。
  • 使用JavaScript ternary operator該運算符經常用作if語句的快捷方式。

var myApp = angular.module('myApp',[]); 
 

 
myApp.controller('MyCtrl',function($scope) { 
 

 
$scope.CompanyCity = { Id: 59, Name: 'berline' }; 
 

 
$scope.distances = [ 
 
    {city1: 59,city2: 1, Distance: 50 }, 
 
    {city1: 1, city2: 58, Distance: 80 }, 
 
    {city1: 3, city2: 59, Distance: 25 }, 
 
    {city1: 4, city2: 1, Distance: 120 } 
 
]; 
 

 

 
$scope.findDistance = function(studentCityID) { 
 
    var res = $scope.distances.filter(function(item) { 
 
     return (item.city1 == studentCityID && item.city2 == $scope.CompanyCity.Id) ? item.Distance : ((item.city2 == studentCityID && item.city1 == $scope.CompanyCity.Id) ? item.Distance : '');  
 
    }); 
 
    console.log(res[0].Distance); // Distance 
 
}; 
 
$scope.findDistance(1); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="myApp" ng-controller="MyCtrl"> 
 
</div>

相關問題