1
votes

I have an ArrayCollection of a list of usernames and user id's. In this list there are duplicates that I need to remove. I've searched the internet and while there are a lot of example of this using Arrays, I can't find any clear examples using ArrayCollection's.

5

5 Answers

7
votes

The should be simpler then the other solution.

function removeDuplicatesInArray(val:*, index:uint, array:Array):Boolean {
  return array.indexOf(val) == array.lastIndexOf(val);
}

function removeDuplicatesInCollection(collection:ArrayCollection):ArrayCollection {
  collection.source = collection.source.filter(removeDuplicatesInArray);

  return collection;
}
4
votes

Here's what I found after quick googling.

//takes an AC and the filters out all duplicate entries
public function getUniqueValues (collection : ArrayCollection) : ArrayCollection {
    var length : Number = collection.length;
    var dic : Dictionary = new Dictionary();

    //this should be whatever type of object you have inside your AC
    var value : Object;
    for(var i : int= 0; i < length; i++){
        value = collection.getItemAt(i);
        dic[value] = value;
    }

    //this bit goes through the dictionary and puts data into a new AC
    var unique = new ArrayCollection();
    for(var prop:String in dic){
        unique.addItem(dic[prop]);
    }
    return unique;
}
0
votes

If you find solutions for the array you can do the same with the ArrayCollection. You can change arrayCollection.source and arrayCollection will be changed too. In general, we can assume that ArrayCollection is wrapper for Array.

0
votes

Array contain a filter function and we can make use of it as following.

            var ar:Array = ["Joe","Bob","Curl","Curl"];
            var distinctData = ar.filter(function(itm, i){
                return ar.indexOf(itm)== i; 
            });

            Alert.show(distinctData.join(","));

Or better yet

            Array.prototype.distinct = function():*
            {
                var arr:Array = this as Array;
                return arr.filter(function(itm, i){
                    return (this as Array).indexOf(itm)== i; 
                },arr);
            };              

            var ar:Array = ["Joe","Bob","Curl","Curl"];
            Alert.show(ar.distinct());
0
votes
function removeDuplicateElement(_arr:Array):Array{
    //set new Dictionary
    var lDic:Dictionary = new Dictionary();
    for each(var thisElement:* in _arr){
        //All values of duplicate entries will be overwritten
        lDic[thisElement] = true;
    }
    _arr = [];
    for(var lKey:* in lDic){
       _arr.push(lKey);
    }
    return _arr;
}