Ваш код почти в порядке. Проблема в том, что свойство E4X .@year
не является литеральной строкой (сейчас я не уверен, но я считаю, что это XMLList
объект). Вот почему вызов indexOf
будет возвращать -1, потому что он ищет дубликат этого объекта, а не строку. E4X преобразует его в строку, как только вы положите его туда, куда могут идти только строки, но до этого времени это будет нечто другое.
Если вы переписали свой код следующим образом, он должен работать сразу:
var yearArr:Array = new Array();
for each (var coverRef : XML in xmlObj.cover){
var year : String = coverRef.@year; // force the property to be a string
if (yearArr.indexOf(year) < 0){
yearArr.push (year);
}
}
Было также несколько других оптимизаций, которые вы могли бы сделать с вашим кодом. Часть new MovieClip()
не использовалась, не все переменные были строго типизированы, и с помощью цикла for each
вы можете гораздо яснее заявить, через какие объекты вы проходите цикл.