Created
April 29, 2010 08:34
-
-
Save jasonm23/383328 to your computer and use it in GitHub Desktop.
Remove duplicate items from an array
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" verticalAlign="middle" backgroundColor="white" creationComplete="init()"> | |
<mx:Script> | |
<![CDATA[ | |
private var keys:Object = {}; | |
/** | |
* Called by the Application container's creationComplete | |
* event handler. This method creates a new Array object | |
* which will be used as a data provider as well as a | |
* filtered view of that array which does not contain | |
* duplicated items. | |
*/ | |
private function init():void { | |
/* Create a dummy data source with some semi-random | |
data. */ | |
var arr:Array = []; | |
arr.push({data:1, label:"one"}); | |
arr.push({data:1, label:"one"}); | |
arr.push({data:1, label:"one"}); | |
arr.push({data:1, label:"one"}); | |
arr.push({data:2, label:"two"}); | |
arr.push({data:2, label:"two"}); | |
arr.push({data:2, label:"two"}); | |
arr.push({data:1, label:"one"}); | |
arr.push({data:3, label:"three"}); | |
arr.push({data:3, label:"three"}); | |
/* Filter the original array and call the | |
removeDuplicates() function on each item | |
in the array. */ | |
var filteredArr:Array = arr.filter(removedDuplicates); | |
arrColl.source = arr; | |
dedupedArrColl.source = filteredArr; | |
} | |
/** | |
* This method is used to filter an array so that no | |
* duplicate items are created. It works by first | |
* checking to see if a keys object already contains | |
* a key equal to the current value of the item.data | |
* value. If the key already exists, the current item | |
* will not be readded to the data provider. If the key | |
* does not already exist, add the key to the keys | |
* object and add this item to the data provider. | |
*/ | |
private function removedDuplicates(item:Object, idx:uint, arr:Array):Boolean { | |
if (keys.hasOwnProperty(item.data)) { | |
/* If the keys Object already has this property, | |
return false and discard this item. */ | |
return false; | |
} else { | |
/* Else the keys Object does *NOT* already have | |
this key, so add this item to the new data | |
provider. */ | |
keys[item.data] = item; | |
return true; | |
} | |
} | |
]]> | |
</mx:Script> | |
<mx:ArrayCollection id="arrColl" /> | |
<mx:ArrayCollection id="dedupedArrColl" /> | |
<mx:HBox> | |
<mx:VBox> | |
<mx:Label text="Original ({arrColl.length} items):" /> | |
<mx:List dataProvider="{arrColl}" /> | |
</mx:VBox> | |
<mx:VBox> | |
<mx:Label text="Filtered ({dedupedArrColl.length} items):" /> | |
<mx:List dataProvider="{dedupedArrColl}" /> | |
</mx:VBox> | |
</mx:HBox> | |
</mx:Application> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment