2017-06-21 17 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

あなたは、任意のキー(Rの場合はその名称)に基づいて配列から重複を削除する関数を呼び出すことができます。 studentsListを "originalArray"に渡し、 "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; 
}