2017-02-06 88 views
1

我試圖避免重複。如果我再次發送同一個名字(比如Jason),我不希望它第二次被添加到$ scope.people。如何在添加前檢查它?AngularJS檢查對象是否有特定值

$scope.people = [ 
    { 
    name : "Jason", 
    age : 26, 
    height : 176, 
    }, 
    { 
    name : "Mark", 
    age : 34 
    height : 190 
    } 
]; 

$scope.add = function(name,age,height) { 
    // How can I make sure that Jason or Mark won't get added again? 
} 

如果它是一個簡單的數組,我會像下面解決它,但這是不同的。

$scope.add = function (name) { 
    if ($scope.people.indexOf(name) == -1) { 
    $scope.people.push(name); 
    } 
}; 
+1

MHM,又該happend如果有其他的「傑森」與26和身高年齡176?地球上有很多人類。也許你會使用稱爲ID的unqiue標識符。 – lin

+0

我只想檢查名稱,因爲它是我在數據庫中保留的預定義列表,所以不會有任何重複的名稱。其實他們是ID(所以我想檢查ID),但我改成了名字,以使它簡單。 – salep

回答

2

您可以使用AngularJS equals像下面的例子會告訴你。這是處理這種邏輯的常用AngularJS方法。那麼,這個解決方案將完全比較兩個對象,而不是隻比較對象的一個​​屬性。

$scope.add = function(name, age, height) { 

     //init 
     var found = false; 

     //equal logic 
     angular.forEach($scope.people, function (people) { 
      if (angular.equals(people, { 
        name: name, 
        age: age, 
        height: height 
       })) { 
       found = true; //set found state 
       return; // break angular.forEach() 
      } 
     }); 

     //proceed 
     if (!found) { 
      $scope.people.push({ 
       name: name, 
       age: age, 
       height: height 
      }); 
     } 
    }; 
+0

Aaaaaand它的工作。非常感謝你。我會在4分鐘內接受這個答案。 – salep

+0

很高興幫助,歡呼。 – lin

1

我從一個StackOverflow上後,我現在無法找到此代碼段。但是,這應該做的伎倆:

function unique(collection, keyname) { 
    var output = [], 
     keys = []; 

    angular.forEach(collection, function (item) { 
     var key = item[keyname]; 
     if (keys.indexOf(key) === -1) { 
      keys.push(key); 
      output.push(item); 
     } 
    }); 
    return output; 
}; 

用法:

$scope.people = unique(jsonArray, 'name'); 
+0

謝謝,即使@林的方法奏效,我也會研究這一點。 Upvoted。 – salep

1

$ .grep可以幫助你在這裏

var result = $.grep(people, function(e){ return e.name == x.name; }); 

結果將是比賽的一個數組,所以你會知道有沒有匹配與否。

+0

謝謝,即使@林的方法奏效,我也會研究這一點。 Upvoted。 – salep

0

您可以使用$過濾器很容易找到現有的人喜歡這個

$scope.people = [{ 
    name: "Jason", 
    age: 26, 
    height: 176, 
    }, { 
    name: "Mark", 
    age: 34, 
    height: 190 
    }]; 

    $scope.add = function(name, age, height) { 
    if(doesntExist(name)){ 
     $scope.people.push({name: name, age: age, height: height}) 
    } 
    } 

    function doesntExist(name){ 
    return $filter('filter')($scope.people, {name: name}).length === 0 
    } 

工作plunker http://plnkr.co/edit/4z4ofqTMUH4rMzpoIsI5?p=preview

相關問題