2011-06-22 32 views
0

我知道如何從數組中刪除重複項,但是我想要做的是防止項目被添加到如果它已經存在,則放在首位。我從一個循環中的XML feed中提取數據,我認爲搜索該值索引是可行的,但無論如何,索引始終爲-1。這裏是我的代碼:flash as3如何防止項目被添加到數組中,如果它已經存在於數組中

var yearArr:Array = new Array(); 

for (var i=0;i<numCovers;i++){ 
    var coverRef = xmlObj.cover[i]; 
    var coverClip:MovieClip = new MovieClip(); 
    coverClip.year = [email protected]; 
    if (yearArr.indexOf(coverClip.year === -1)){ 
    yearArr.push (coverClip.year); 
    } 
} 

也許我誤解的indexOf功能,但我認爲它應該返回-1值並沒有在數組中存在。我究竟做錯了什麼?

+3

用'indexOf'函數計算行上的開括號'('和右括號'''')。注意到奇怪的事情? –

+0

這只是一個錯誤類型 - 無論如何,有效的代碼將一年推向數組。我已經編輯了上面的代碼,很好。 – mheavers

+0

這很奇怪 - 我上面的代碼實際上工作,如果你替換實際的數字,而不是變量引用... – mheavers

回答

1

你的代碼幾乎沒問題。問題是E4X屬性[email protected]不是一個文字字符串(我現在不確定,但我相信它是一個XMLList對象)。這就是爲什麼indexOf調用將保持返回-1,因爲它正在尋找該對象的副本,而不是字符串。只要你把它放在只有字符串可以去的地方,E4X就會把它轉換成一個字符串,但是直到那時它纔是別的。

如果你重寫你這樣的代碼,它應該工作的時候了:

var yearArr:Array = new Array(); 

for each (var coverRef : XML in xmlObj.cover){ 
    var year : String = [email protected]; // force the property to be a string 
    if (yearArr.indexOf(year) < 0){ 
    yearArr.push (year); 
    } 
} 

也有一些其他的優化,你可以做你的代碼。沒有使用new MovieClip()部分,並非所有變量都是強類型的,並且通過使用for each循環,可以更清楚地說明要循環的對象。

0

這是你可以做的,例如,如果你有一個字符串數組。

var ItemList:Array = new Array(); 

for each(var Item:String in UseYourXMLFeed) 
{ 
    if(ItemList.indexOf(Item) == -1) 
    { 
     ItemList.push(Item); 
    } 
} 

編輯:

不管怎麼說,你真正的答案是由Sam評論。

+0

搜索不是一個函數在閃存 – mheavers

+0

哦對不起,我的意思是indexOf。那麼我寫它更多的作爲一個算法的OP,更早.....猜這就是'搜索'這個詞來自何處。謝謝你指出。 :) – loxxy

1

這是我想出瞭解決方案:

var yearArr:Array = new Array(); 

for (var i=0;i<numCovers;i++){ 
    var coverRef = xmlObj.cover[i]; 
    var coverClip:MovieClip = new MovieClip(); 
    coverYear = [email protected]; 
    addCoverYear(coverYear); 
} 

function addCoverYear(coverYear:int):void { 
    if (yearArr.indexOf(coverYear) == -1){ 
     yearArr.push(coverYear); 
    } 
} 
1

你可以通過一切字典,它會自動刪除冗餘減少的數組。然後將字典作爲新數組傳回。

//Reduce Array 
private function reduceArray(array:Array):Array 
    { 
    var dictionary:Dictionary = new Dictionary(); 

    for each (var element:String in array) 
       dictionary[element] = true; 

    var result:Array = new Array(); 

    for   (var key:String in dictionary) 
       result.push(key); 

    dictionary = null; 

    return result; 
    } 
+0

酷 - 我不知道有關字典。謝謝! – mheavers

相關問題