我很好奇检测数组集合是否包含由对象的属性值确定的重复对象的最佳方法。例如,
var _myArrayCollection:ArrayCollection = new ArrayCollection([{name: "name1", value: "value1"}, {name: "name2", value: "value2"}, {name: "name1", value: "value3"}]);
请注意,此数组集合有 3 个项目。其中 2 个项目的 name 属性值相同。我认为这是重复的。
你知道这个方法的主体是什么样子吗?我有一些想法,但没有一个感觉很优雅。
private function containsDuplicates(ac:ArrayCollection, property:String):Boolean
最佳答案
您可以将给定属性的值保存在数组中,并继续在该数组内搜索重复项。唯一不好的部分是搜索时间随着数组大小的增加而增加。
var valueArray:Array = new Array();
for each (object:Object in ac) {
var value = object[property];
if (valueArray.indexOf(value) >= 0) {
return true;
} else {
valueArray.push(value);
}
}
return false;
更有效(但更复杂的解决方案)可能是保存值,对它们进行排序,然后执行一次运行来搜索重复项。
关于apache-flex - Flex ArrayCollection 按属性值检测重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4221964/