1

以下で説明するように、ArrayCollection があります。

        private var initDG:ArrayCollection = new ArrayCollection([
            {fact: "Order #2314", appName: "AA"},

            {fact: "Order #2315", appName: "BB"}

            {fact: "Order #2316", appName: "BB"}
                            ...

            {fact: "Order #2320", appName: "CC"}

            {fact: "Order #2321", appName: "CC"}

            ]);

ArrayCollection initDGの「appName」フィールドのUNIQUE VALUESをComboBox に設定したいと考えています。

<mx:ComboBox id="appCombo" dataProvider="{initDG}" labelField="appName"/>

私が考えることができる 1 つの方法は、Array オブジェクトをループし、各オブジェクトをチェックして、一意の appName エントリを別の Array にプッシュすることです。利用可能なより良い解決策はありますか?

4

3 に答える 3

3

いいと思います:

var unique:Object = {};
var value:String;
var array:Array = initDG.toArray();
var result:Array = [];
var i:int = 0;
var n:int = array.length;
for (i; i < n; i++)
{
 value = array[i].appName;
 if (!unique[value])
 {
  unique[value] = true;
  result.push(value);
 }

}
return new ArrayCollection(result);
于 2010-03-19T05:44:18.880 に答える
1

このクラスを使用して、一意の配列コレクションを見つけることができます。

tempArray=_uniqueArray.applyUnqiueKey1(_normalsearchdata.toArray());

「uniqueArray」これはパッケージ名で、_normalsearchdata は ArrayCollection です。

package{
    import mx.collections.ArrayCollection;
    public class applyUniqueKey{
        private var tempArray:Array;

        private var tempIndex = 0;
        public var temp:String;
        public function applyUnqiueKey1(myArray)

        {
            tempArray = new Array();
            tempIndex = 0;  
            myArray.sort();
            tempArray[0] = myArray[0];
            tempIndex++;

            for(var i=1; i<myArray.length; i++) {
                if(myArray[i] != myArray[i-1]) {
                    tempArray[tempIndex] = myArray[i];
                    tempIndex++;
                }
            }
            var temp=String(tempArray.join());
            return new ArrayCollection(tempArray);
        }
    }
}
于 2010-08-13T07:02:04.703 に答える
0

残念ながら、ActionScript の Array には unique() メソッドはありませんが、次のように概算できます。

var names:Array = initDG.toArray().map(
    function (e:Object, i:Number, a:Array):String {
        return e.appName;
    }
);

var uniqueNames:Array = names.filter(
    function (name:String, i:Number, a:Array):Boolean {
                // Only returns true for the first instance.
        return names.indexOf(name) == i;
    }
);

値で比較される文字列をフィルタリングしているため、これが機能することに注意してください。任意のオブジェクトをフィルタリングする必要がある場合、これは効果的ではありません。

于 2010-03-19T07:25:06.930 に答える