Flex中如何利用Array.filter()事件从一个数组中移除重复项目的例子

 

 

<!-- Google Adsense Begin <div style="margin: 3px; float: right;"> </div> Google Adsense End --><!--content with more link-->

和前面的Flex中如何通过filterFunction属性对XMLListCollection进行筛选的例子类似的,接下来的例子演示了Flex中如何利用Array.filter()事件,从一个数组中移除重复项目。

 

<?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> 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值