2017-02-08 7 views
1

私はCItyDistanceのテーブルを持っています:CIty1Id | City2Id |距離(KM)、 今私のプロジェクトでは2つの都市Idを受け取ります。これらの2つの都市の計算された距離。Angular.jsで指定された2つのプロパティによる配列の一致オブジェクトを検索します

誰が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

私は場合は私に知らせてください、私が提案できるすべてが

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

以下のコードで何を実装したことはあるため、JSON構造の罰金だと思います役立ちます!

+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>

関連する問題