public function countrySelections(e:Event):Boolean {
var countryChanged:Boolean = false;
var countries:ArrayCollection = e.currentTarget.selectedItems;
trace("countrySelections:"+countries);
var tmp:String = '';
for each(var i:Object in countries) {
if(i.countryCode == 'All'){
tmp = 'All';
break;
} else {
tmp+=i.countryCode+'|';
}
}
//Alert.show(myStrings.countryList + '___' + tmp);
if(tmp != 'All'){
tmp = tmp.substring(0, tmp.lastIndexOf('|'));
if(myStrings.countryList.split('|').length > countries.length){
countryChanged = true;
} else {
for each(var j:Object in countries){
if(myStrings.countryList.indexOf(j.countryCode) < 0 ){
countryChanged = true;
}
}
}
} else {
if(myStrings.countryList != 'All') {countryChanged = true;}
}
myStrings.countryList = tmp;
return countryChanged;
}
上面的函數是同事寫的,問題很多,其實主要的功能是myStrings.countryList 和e.currentTarget.selectedItems的比較。
1)首先可以把事件去掉
2)引用和改變了全局變量myStrings.countryList
3)兩個for,很多的if-else
其實這個問題可以簡化爲兩個排好序數組的比較,可見排序很重要
private function countrySelections2(c1:Array,c2:Array){
return c1.sort().join("|")!=c2.sort().join("|")
}