2017-06-21 52 views
0

我有這個。在AngularJS中點擊刪除重複項目

var studentsList = [ 
    {"Id": "101", "name": "One"}, 
    {"Id": "101", "name": "One"}, 
    {"Id": "102", "name": "Two"}, 
    {"Id": "103", "name": "Three"}, 
    {"Id": "103", "name": "Three"}, 
    {"Id": "104", "name": "Four"}, 
    {"Id": "104", "name": "Four"} 
]; 

我想切換,在點擊時刪除此對象的重複項。

<button ng-click="removeDuplicates = !removeDuplicates"></button> 

我該怎麼做,有什麼想法?

預先感謝:)

+0

後,你嘗試過的代碼。 –

+1

[從JavaScript數組中刪除重複]的可能重複(https://stackoverflow.com/questions/9229645/remove-duplicates-from-javascript-array) –

+0

我剛剛創建了2個類似的對象,第一個重複,第二個沒有(過濾),然後隱藏/顯示(切換)它們。但它也不是我認爲的最好的方式 –

回答

1

angular.module('app', []) 
 
.controller('MyController', ['$scope', function($scope) { 
 
    $scope.studentsList = [ 
 
    {"Id": "101", "name": "One"}, 
 
    {"Id": "101", "name": "One"}, 
 
    {"Id": "102", "name": "Two"}, 
 
    {"Id": "103", "name": "Three"}, 
 
    {"Id": "103", "name": "Three"}, 
 
    {"Id": "104", "name": "Four"}, 
 
    {"Id": "104", "name": "Four"} 
 
]; 
 
}]).filter('dupfilter',function(){ 
 
    var cache = {}; 
 
    return function(array, dup){ 
 
    if(dup) 
 
     return array; 
 
     
 
    var key = JSON.stringify(array); 
 
    if(cache[key]) 
 
     return cache[key]; 
 
    
 
    var temp = []; 
 
    for(var item of array){ 
 
     item.$$hashKey = undefined; 
 
     var str = JSON.stringify(item); 
 
     if(temp.indexOf(str) == -1) 
 
     temp.push(str); 
 
    } 
 
    var result = []; 
 
    for(var item of temp) 
 
     result.push(JSON.parse(item)); 
 
     
 
    cache[key] = result; 
 
     
 
    return result; 
 
    } 
 
})
<script src="//code.angularjs.org/snapshot/angular.min.js"></script> 
 

 
<div ng-app='app' ng-controller="MyController">  
 
    <input type='button' value='{{(removeDuplicates ? "Allow" : "Remove") + " duplicates"}}' ng-click='removeDuplicates=!removeDuplicates'/> 
 
    <ul> 
 
    <li ng-repeat='item in studentsList | dupfilter: !removeDuplicates'>{{item | json}}</li> 
 
    </ul> 
 
</div>

+0

謝謝先生:)你節省我的一週) –

0

你可以調用一個函數,它會刪除從基於任意一個鍵陣列的複製(在讀的情況下它的名字)。 在「originalArray」中傳遞您的studentsList,並在「prop」中傳遞名稱。

removeDuplicates(originalArray, prop) { 
    var newArray = []; 
    var lookupObject = {}; 

    for(var i in originalArray) { 
     lookupObject[originalArray[i][prop]] = originalArray[i]; 
    } 

    for(i in lookupObject) { 
     newArray.push(lookupObject[i]); 
    } 
    return newArray; 
}