ActionScript:ArrayCollection aの要素からArrayCollection bに含まれるもののみを抜き出すには
var a:ArrayCollection = new ArrayCollection(["aaa", "bbb", "ccc", "ddd", "eee"]); var b:ArrayCollection = new ArrayCollection(["bbb", "ccc"]); var result:Array = a.toArray().filter( function(item:*, index:int, arr:Array):Boolean{ item = item as String; return item && b.contains(item); });
これで行けた.ArrayCollectionにもfilterFunctionというフィールドがあるので,なにか同じようなことができるはずですが,
よくわからないので,今の所これで.
これのプログラムはこれ.ListからListへドラッグしてみましょう.
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()"> <mx:ArrayCollection id="a" /> <mx:ArrayCollection id="b" /> <mx:Script> <![CDATA[ import mx.events.DragEvent; import mx.collections.ArrayCollection; private function updateList(event:DragEvent):void{ updatedList.dataProvider = a.toArray().filter(function(item:*, index:int, arr:Array):Boolean{ item = item as String; return item && b.contains(item); }); } private function initApp():void{ a = new ArrayCollection(["aaa", "bbb", "ccc", "ddddd", "eeeeee", "ffffff"]); } ]]> </mx:Script> <mx:HDividedBox width="100%" height="100%"> <mx:Panel title="ドラッグ元" width="10%" height="100%" layout="absolute"> <mx:List id="dragSrc" width="100%" height="100%" dragEnabled="true" dragComplete="updateList(event)" dataProvider="{a}"/> </mx:Panel> <mx:Panel title="ドロップ先" width="10%" height="100%" layout="absolute"> <mx:List id="targetList" width="100%" height="100%" dropEnabled="true" dataProvider="{b}"/> </mx:Panel> <mx:Panel title="ドラッグもとのうち,ドロップ先にドロップされたものだけ表示します" width="10%" height="100%" layout="absolute"> <mx:List id="updatedList" width="100%" height="100%"/> </mx:Panel> </mx:HDividedBox> </mx:Application>