0

Flex の配列からすべての重複を削除するソリューションを緊急に探しています。filteredData 配列内のすべての重複を除外する必要があります。

オブジェクトが配列にロードされているため、ここでは indexOf はうまくいきません。

前もって感謝します

var columnArray:Array = ['ingenre']; //Datagrid column names to filter on
            var songArray:Array = ['id']; //Datagrid column names to filter on
            var gridDataProvider:ArrayCollection = PhotoData; //Name of datagrid's dataprovider. In this case e.g. databases
            var dataGridName:String = 'dgUserRequest'; //Name of the datagrid you are filtering by
             
            //Do not edit code past this point
            var filteredData:Array = [];
            var added:Boolean=false;
            var i:int;
            var j:int;

            var filtertxt: String;
            var matchtxt:String;
             
            // Loop Through Grid
            for(i=0; i < gridDataProvider.length; i++){

                added = false;
                 
                //Loop through grid column
                for(j=0; j<columnArray.length; j++){

                    if(gridDataProvider[i][columnArray[j]]!=null){

                        //Grab datagrid cell contents, trim it, and convert to lowercase for comparison.
                        var filterString:String = gridDataProvider[i][columnArray[j]].toString().toLowerCase();
                        var songIdString:String = gridDataProvider[i][songArray[j]].toString().toLowerCase();

                        //Compare the datagrid string(filterString) to the user typed string(filterText).
                        if(!added){

                            // loop through the Array & check if there is a match. 
                            for (var k:int = 0;k < filterText.length; k++)
                            {

                                filtertxt = filterString.toLowerCase();
                                matchtxt = filterText[k].toLowerCase();

                                //if(filterString.toLowerCase() == filterText[k].toLowerCase()){

                                if(filtertxt.search(matchtxt) >= 0){

                                    if (cmd_classic.selected == true)
                                    {
                                        trace(filteredData.indexOf(songIdString));
                                        if(filteredData.indexOf(songIdString) < 0)
                                        {
                                            if ((filtertxt.search("class") == -1) && (filtertxt.search("baroque") == -1))
                                            {
                                                if (filteredData.indexOf(songIdString) == -1)
                                                {
                                                    filteredData.push(gridDataProvider[i]);
                                                    added = true;
                                                }
                                            }
                                            else
                                            {
                                                break;
                                            }
                                        }
                                    }
                                    else
                                    {

                                        if (filteredData.lastIndexOf(songIdString) <= 0)
                                        {
                                            filteredData.push(gridDataProvider[i]);
                                            added = true;
                                        }

                                    }
                                }   
                            }
                        }else{
                            //Do nothing, break out.
                            break;
                        }
                    }
                }
            }
4

1 に答える 1

0

Flex には、私が認識している Set クラスは実際にはありません。しかし、リストから一意の値のリストを取得する必要があるときに私が過去に行ったことは、新しい Dictionary を作成することです。重複排除する値をキーとして使用してリストをループし、完了したらキー セットを取得します。

于 2013-10-08T20:35:09.983 に答える