我有一个数组,crewPositionsAC,其中包含位置异化列表 - EP,PR,DR,WR等。每次我的flex应用程序加载时,都会通过XML文件读入这些位置。从XML填充也是一个项目。在一个项目中,有一些职位(一名学生被分配到crewPositionsAC中列出的一种职位)。这些位置不一定是由crewPositionsAC规定的正确层次结构顺序。我拥有ArrayCollection(positionsAC)中的所有位置,具有以下结构:
positionsAC (arrayCollection)
[0] = Array
[0] = startOffset
[1] = numDays
[2] = role
[3] = studentID
[4] = conflict
[5] = studentType
[6] = showInPrinciple
[7] = revisionNumber
*continue until all positions are listed*
我的问题是,如何重新排序positionAC以确保每个数组的“角色”部分的顺序正确(由crewPositionsAC指定)?我尝试了几个不同的循环,但没有任何东西接近。
修改
所以,有几个项目,每个项目中有几个职位(通常是16或17,但没有固定数字。
在项目中,有一个名为positionsAC的变量具有以下结构:
positionsAC:
[0] (array)
[0] = startOffset
[1] = numDays
[2] = role
[3] = studentID
[4] = conflict
[5] = studentType
[6] = showInPrinciple
[7] = revisionNumber
*continue until all positions are listed*
然后,用户可以单击按钮添加其他位置。按下“添加船员”按钮后,将向用户显示要添加的可能位置列表。目前,我只是向positionsAC添加另一个数组。这导致最近添加的机组成员被放置在列表的底部。我需要根据crewPositionsAC中定义的层次结构,根据它的[2]项(角色)对positionAC进行重新排序。 crewPositionsAC具有以下结构:
crewPositionsAC:
[0] = EP
[1] = PR
[2] = DR
[3] = WR
* continue until all possible position types are listed
希望有所帮助。
答案 0 :(得分:1)
尝试这些循环:
for (var i:int = 0; i < crewPositionsAC.length; i++)
{
var sourcePosition:Object = crewPositionsAC.getItemAt(i);
var actualPosition:Object = findActualPositionByRole(sourcePosition);
positionsAC.setItemAt(actualPosition, i);
}
function findActualPositionByRole(sourcePosition):Object
{
for (var i:int = 0; i < positionsAC.length; i++)
{
var currentPosition:Object = positionsAC.getItemAt(i);
if (currentPosition[2] == sourcePosition[2])
return currentPosition;
}
throw new Error("There's no matching item with the specified role");
}
上述代码应该在@Tim尝试验证的假设下工作。
答案 1 :(得分:0)
使用以下内容作为实现目标的基础:
for (var i:int = 0; i < parentDocument.crewPositionsAC.length; i++)
{
for (var j:int = 0; j < positionsAC.length; j++)
{
if (positionsAC[j][2] == parentDocument.crewPositionsAC.getItemAt(i))
tempAC.addItem(positionsAC[j] as Array);
}
}
从那里,我可以使用tempAC来到达我需要去的地方...谢谢你,我得到了我需要的地方=)