apache-flex - 如何查找具有特定属性值的 ArrayCollection 项?

标签 apache-flex actionscript syntax

我有一些这样的 XML 结构:

var struct:XML = <mh>
  <mi id="1" stuff="whatever"/>
  <mi id="2" stuff="whatever"/>
  <mi id="3" stuff="whatever"/>
</mh>;

我知道我可以通过“id”访问子节点,方式如下:
var stuff:Object = struct.(hasOwnProperty('@id') && @id == '2').@stuff;

现在我有一些类似的 ArrayCollection 结构:
private var cmenu:ArrayCollection = new ArrayCollection([
    {id:"1", stuff:"whatever"},
    {id:"2", stuff:"whatever"},
    {id:"3", stuff:"whatever"}
]);

我想知道是否可以以类似的方式访问项目,如下所示:
var stuff:Object = cmenu['id == 2'].stuff;

是否可以?

最佳答案

您可以稍微概括一下 Matt 的答案,以便您可以传入所需的 ID 值,而不是对其进行硬编码,并且只需要一行即可获得匹配项(我假设您可能想在多个地方执行此操作)。

首先,您将编写一个函数来生成您的查找函数:

function findId(id:int):Function {
  return function( element : *, index : int, array : Array ) : Boolean
  {
    return element.id == id;
  }
}

然后我会编写一个函数来返回第一个匹配项,这样您就不必重复这两行:
function findInCollection(c:ArrayCollection, find:Function):Object {
  var matches : Array = c.source.filter( find );
  return ( matches.length > 0 ? matches[0] : null );
}

那么你只需这样做:
var stuff:String = findInCollection(cmenu, findId(2)) as String;

关于apache-flex - 如何查找具有特定属性值的 ArrayCollection 项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1566145/

相关文章:

apache-flex - FLEX : Programmatically remove Alert?

javascript - 有效的 JavaScript 代码不是有效的 ActionScript 3.0 代码?

javascript - 通过Javascript触发ActionScript函数

c - 不确定为什么我的代码没有添加和打印我的链表?

java - Flex 中此声明的 Java 等效项是什么

iphone - iPhone 支持 Flex 和 Flash 吗?

java - ActionScript 与 Java 检测碰撞

javascript - 谁能解释一下 jCarousel 中的以下 JavaScript 代码?

PHP strtotime() 函数

java - 安装 Apache Flex SDK 4.16.0 后 Flash Builder 4.7 无法打开