2017-02-08 1 views
1

J'ai une table de CItyDistance: CIty1Id | City2Id | Distance (KM), Maintenant dans mon projet je reçois 2 villes Id, je veux vérifier s'il y a une distance calculée pour ces 2 villes. Donc, peu importe qui sera City1 ou City2, j'ai besoin de vérifier les deux options. La façon dont j'ai trouvé pour le vérifier est trop longue et salissante. Quelqu'un peut-il offrir une alternative? (S'il vous plaît vérifier Plunker Exemple:. https://plnkr.co/edit/nzB8zy0034LqJFgL8qk7?p=previewAngular.js recherche de l'objet de correspondance dans le tableau par 2 propriétés données

$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

Vérifiez ma réponse, il fonctionnera selon vos attentes. –

Répondre

2

vous pouvez essayer, remplacer vous fonctionnez $scope.findDistance avec cela. Je pense qu'il a moins de code et de manière efficace pour atteindre vos besoins.

$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; 
     } 
    }); 
}; 

Ajouté plunker, https://plnkr.co/edit/3r3intufeiqc26kzcnca?p=preview

Merci, Bonne chance :)

+0

Nice, j'ai essayé d'utiliser IndexOf mais sans succès, eh bien c'est une belle façon, s'il n'y aura pas de meilleure façon suggéré je vais utiliser celui-ci, Merci – tomersss2

+0

@LifeLess Vous êtes les bienvenus. :) –

+0

Eh bien, votre code a un défaut, que se passe-t-il si la distance est similaire à l'un des ID que vous cherchez? il peut être résolu par: arr.splice (2, 1). mais merci, j'accepte cette réponse car c'est la plus courte – tomersss2

0

Je pense que ce que vous avez mis en œuvre est bien en raison de la structure JSON Tout ce que je peux suggérer, est le code ci-dessous

$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; 
     } 
    } 
}; 

S'il vous plaît laissez-moi savoir si aide!

+0

c'est plus compliqué que ci-dessus :) – MMK

+0

Oui, mais c'est plus efficace que quand vous avez un grand nombre de données. –

0

utilisation ci-dessous la méthode & opérateur pour optimiser votre code:

  • utiliser le tableau filter() méthode pour itérer le tableau et crée un nouveau tableau avec tous les éléments qui réussissent le test implémenté par la fonction fournie.
  • Utiliser JavaScript ternary operator Cet opérateur est fréquemment utilisé comme raccourci pour l'instruction 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>