【发布时间】:2012-05-09 09:03:11
【问题描述】:
我有一个具有不同属性的对象数组,我需要以不重复特定属性的方式过滤数组。
例如:
var array:Array = [{foo:"a1", bar:"b1", baz:"c1"},
{foo:"a2", bar:"b2", baz:"c2"},
{foo:"a3", bar:"b1", baz:"c3"},
{foo:"a1", bar:"b4", baz:"c2"},
{foo:"a0", bar:"b3", baz:"c1"}];
现在假设我要过滤属性baz 上的对象。过滤数组的最有效方法是什么,以便在操作后没有两个元素对baz 具有相同的值?
在我的示例中,结果应该只包含:
var result:Array = [{foo:"a1", bar:"b1", baz:"c1"},
{foo:"a2", bar:"b2", baz:"c2"},
{foo:"a3", bar:"b1", baz:"c3"}]
因为其他对象会有 baz 属性的重复条目。
结果数组的顺序并不重要,baz 值相同的对象中的哪个对象进入结果数组也不重要。
更新:
对象数组用作数据提供者,以使用有关聊天室的信息填充s:Datagrid。数组中的对象携带相关信息(如服务器上的房间 ID 和其他一些配置设置)。
我在示例中使用的baz 属性实际上是聊天室配置使用的语言的ID,我想创建一个s:DropDownList,我可以使用它来过滤Datagrid 的各个语言(例如显示所有使用“德语”的房间)。
很可能有许多对象具有相同的语言 ID,但我只希望每个语言 ID 在 DropDownList 中出现一次。
我需要从Datagrids's dataprovider(源数组)中提取该信息,并且无法直接检索我的语言,因为DropDownList 是通用DatagridHeaderRenderer 的一部分,该通用DatagridHeaderRenderer 用于许多不同的Datagrids数据。
【问题讨论】:
-
@wvxvw:它确实应该创建一个副本,因为不能修改源数组。我将在问题中添加带有更多信息的用例。源数组未按应过滤的属性排序,
baz重复相同值的机会很高。
标签: arrays actionscript-3 flash