сколько потомков в моей коллекции массивов с одним и тем же узлом в flex? - PullRequest
0 голосов
/ 30 марта 2012

У меня есть ArrayCollection, в которой есть несколько сотрудников и отделов.Каждый сотрудник принадлежит одному отделу.

Как я могу узнать, сколько сотрудников принадлежит к одному и тому же отделу из указанной коллекции ArrayCollection.

В базе данных мы используем запрос соединения, чтобы сделать это, но как я могу сделать это, используяArrayCollection в Flex?

Например

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}]);

в массиве выше 3 сотрудника принадлежат отделу 1 2 сотрудника принадлежат отделу 2 4 сотрудника принадлежат отделу 3 1 сотрудники принадлежатотдел 4

Как я могу получить эти значения из массива коллекции в flex?есть встроенная функция или свойство, предоставленное Adobe.

Заранее спасибо

Ответы [ 4 ]

0 голосов
/ 17 апреля 2012

Просто используйте встроенную функцию фильтра для фильтрации того, что вы хотите.Кроме того, ваш объект не был правильно настроен.

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
0 голосов
/ 30 марта 2012

Если chields снова ArrayCollection, может помочь следующее:

var o : ArrayCollection = new ArrayCollection();
( o.getItemAt( 0 ) as ArrayCollection ).length 
0 голосов
/ 30 марта 2012

Как указал Адриан, вам нужно реализовать алгоритм анализа вашей коллекции и определить, сколько сотрудников принадлежит каждому отделу.Вот некоторые идеи:

Обычно коллекции массивов используются для хранения нескольких элементов одного типа, поэтому нет смысла иметь сотрудников и отделы в одной коллекции.Поскольку отделы в любой компании обычно четко определены, в том смысле, что они меняются не очень часто, лучше использовать «enum» или список констант с каждым названием отдела или уникальным кодом.Это может быть достигнуто путем создания статического класса, который содержит все имена отделов в виде статических строк.

Следующим шагом является анализ исходной коллекции и определение количества сотрудников, назначенных каждому из существующих отделов.И снова Адриан указал способ реализации этого.

Надеюсь, это поможет.Хорошего дня.

0 голосов
/ 30 марта 2012

В Flex / AS3 он такой же, как и в любом языке программирования (java, php, c и т. Д.).Вы должны сделать цикл в элементах массива и проверить свойство отдела.

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");
...