【发布时间】:2014-08-01 08:56:06
【问题描述】:
我有一个用户名和用户 ID 列表的 ArrayCollection。在此列表中,我需要删除重复项。我搜索了互联网,虽然有很多使用数组的示例,但我找不到任何使用 ArrayCollection 的明确示例。
【问题讨论】:
标签: actionscript-3 flash apache-flex arraycollection
我有一个用户名和用户 ID 列表的 ArrayCollection。在此列表中,我需要删除重复项。我搜索了互联网,虽然有很多使用数组的示例,但我找不到任何使用 ArrayCollection 的明确示例。
【问题讨论】:
标签: actionscript-3 flash apache-flex arraycollection
应该比其他解决方案更简单。
function removeDuplicatesInArray(val:*, index:uint, array:Array):Boolean {
return array.indexOf(val) == array.lastIndexOf(val);
}
function removeDuplicatesInCollection(collection:ArrayCollection):ArrayCollection {
collection.source = collection.source.filter(removeDuplicatesInArray);
return collection;
}
【讨论】:
这是我快速搜索后发现的。
//takes an AC and the filters out all duplicate entries
public function getUniqueValues (collection : ArrayCollection) : ArrayCollection {
var length : Number = collection.length;
var dic : Dictionary = new Dictionary();
//this should be whatever type of object you have inside your AC
var value : Object;
for(var i : int= 0; i < length; i++){
value = collection.getItemAt(i);
dic[value] = value;
}
//this bit goes through the dictionary and puts data into a new AC
var unique = new ArrayCollection();
for(var prop:String in dic){
unique.addItem(dic[prop]);
}
return unique;
}
【讨论】:
如果您找到数组的解决方案,您可以对 ArrayCollection 执行相同的操作。您可以更改arrayCollection.source 和arrayCollection 也将被更改。一般来说,我们可以假设 ArrayCollection 是 Array 的包装器。
【讨论】:
数组包含一个过滤函数,我们可以如下使用它。
var ar:Array = ["Joe","Bob","Curl","Curl"];
var distinctData = ar.filter(function(itm, i){
return ar.indexOf(itm)== i;
});
Alert.show(distinctData.join(","));
或者更好
Array.prototype.distinct = function():*
{
var arr:Array = this as Array;
return arr.filter(function(itm, i){
return (this as Array).indexOf(itm)== i;
},arr);
};
var ar:Array = ["Joe","Bob","Curl","Curl"];
Alert.show(ar.distinct());
【讨论】:
function removeDuplicateElement(_arr:Array):Array{
//set new Dictionary
var lDic:Dictionary = new Dictionary();
for each(var thisElement:* in _arr){
//All values of duplicate entries will be overwritten
lDic[thisElement] = true;
}
_arr = [];
for(var lKey:* in lDic){
_arr.push(lKey);
}
return _arr;
}
【讨论】: