Flex ArrayCollection按属性值检测重复项

时间:2010-11-19 03:58:13

标签: flex actionscript-3

我很好奇检测到一个arraycollection包含由对象的属性值确定的重复对象的最佳方法。例如,

var _myArrayCollection:ArrayCollection = new ArrayCollection([{name: "name1", value: "value1"}, {name: "name2", value: "value2"}, {name: "name1", value: "value3"}]);

请注意,此arraycollection有3个项目。其中2个项目具有相同的name属性值。我认为这是重复的。

任何想法这个方法的主体会是什么样子?我有想法,但没有一个感觉非常优雅。

private function containsDuplicates(ac:ArrayCollection, property:String):Boolean

3 个答案:

答案 0 :(得分:3)

您可以将给定属性的值保存在数组中,并继续在该数组中搜索重复项。唯一不好的部分是搜索时间随着数组大小的增加而增加。

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;

更有效(但非常复杂的解决方案)可能是保存值,对它们进行排序,并执行单次运行以搜索重复项。

答案 1 :(得分:1)

for(var i:int=0; i<buscatype.length; i++)
{
    for(var j:int = (i+1); j <buscatype.length; j++)
    {
        if(buscatype[i].produst_type_nameCol==buscatype[j].produst_type_nameCol)
        {
            buscatype.removeItemAt(j);
            j-=1;
        }
    }
}

答案 2 :(得分:1)