我有一个ArrayCollection,它有几个员工和部门。 每个员工属于一个部门。
如何从ArrayCollection中找出属于同一部门的员工人数。
在数据库中我们使用连接查询来执行此操作,但是如何通过在Flex中使用ArrayCollection来实现此目的?
例如
var employees:ArrayCollection = new ArrayCollection([
{Id:1, name="a", departmentid:1},
{Id:1, name="b", departmentid:1},
{Id:1, name="c", departmentid:1},
{Id:1, name="x", departmentid:2},
{Id:1, name="y", departmentid:2},
{Id:1, name="m", departmentid:3},
{Id:1, name="n", departmentid:3},
{Id:1, name="p", departmentid:3},
{Id:1, name="o", departmentid:3},
{Id:1, name="s", departmentid:4}]);
在上面的arraycollection中 3名员工属于第1部门 2名员工属于部门2 4名员工属于第3部门 1名员工属于第4部门
如何从flex中的arraycollection中获取这些值? 是否存在由adobe提供的内部功能或属性。
提前致谢
答案 0 :(得分:0)
在Flex / AS3中,它与任何编程语言(java,php,c等)相同。 你必须循环进入数组的元素并检查department属性。
var myColl:ArrayCollection....
var count:int = 0;
for(i=0 ; i < myColl.length; i++)
{
var emp:MyEmplModel = myColl[i] as MyEmplModel;
if(emp.department == "someDepartment")
{
count++;
}
}
trace("There are "+count+" emp. in someDepartment");
答案 1 :(得分:0)
如果chields再次是ArrayCollection,则以下内容可能有所帮助..
var o : ArrayCollection = new ArrayCollection();
( o.getItemAt( 0 ) as ArrayCollection ).length
答案 2 :(得分:0)
就像Adrian指出的那样,您需要实施一种算法来解析您的收藏,并确定每个部门有多少员工。一些想法:
通常,数组集合用于存储同一类型的多个项目,因此将员工和部门放在同一集合中是没有意义的。由于任何公司的部门通常都是明确定义的,从某种意义上讲,它们不会经常更改,因此最好使用“枚举”或常量列表,每个部门名称或唯一代码。这可以通过创建一个静态类来实现,该静态类包含所有部门名称作为静态字符串。
下一步是解析您的初始集合,并确定为每个现有部门分配了多少员工。再次,阿德里安指出了实现这一目标的方法。
希望这会有所帮助。祝你有美好的一天。
答案 3 :(得分:0)
只需使用内置过滤功能来过滤您想要的内容 另外,您的对象设置不正确。
function myFilterFunc( obj:Object ):Boolean{
if( obj['departmentid'] == deptId )
return true;
return false;
}
var deptId:int = 0;
var employees:ArrayCollection;
employees = new ArrayCollection([
{'Id':1,'name':"a", 'departmentid':1},
{'Id':1,'name':"b", 'departmentid':1},
{'Id':1,'name':"c", 'departmentid':1},
{'Id':1,'name':"x", 'departmentid':2},
{'Id':1,'name':"y", 'departmentid':2},
{'Id':1,'name':"m", 'departmentid':3},
{'Id':1,'name':"n", 'departmentid':3},
{'Id':1,'name':"p", 'departmentid':3},
{'Id':1,'name':"o", 'departmentid':3},
{'Id':1,'name':"s", 'departmentid':4}]);
employees.filterFunction = myFilterFunc;
trace( employees.length ) // 10 // no filter applied
employees.refresh()
trace( employees.length ) // 0 // default of 0 is applied
deptId = 1
employees.refresh()
trace( employees.length ) // 3
deptId = 2
employees.refresh()
trace( employees.length ) // 2
deptId = 3
employees.refresh()
trace( employees.length ) // 4
deptId = 4
employees.refresh()
trace( employees.length ) // 1
employees.filterFunction = null;
employees.refresh()
trace( employees.length ) // 10