我想将一个值与另一个数组中的所有值进行比较,然后找到匹配项。它们的长度不同。
想象一列未分类的ID和一列ID和名称。我想出了这个,但它不起作用。
private function mergeCollections():void
{
for (var k:int = 0;k <= idArray.length;k++)
{
for(var i:int = 0; i <= namesArray.length;i++){
if(idArray[k].id == namesArray[i].id){
idArray[k].name = namesArray[i].name;
}
}
}
}
这就是我要解决的问题:
Array Coll idArray = [{3}{" "},
{1}{" "},
{2}{" "}]
Array Coll namesArray[{1}{Name1},
{2}{Name2},
{3}{Name3},
{4}{Name4}]
Result =
idArray = [{3}{Name3},
{1}{Name1},
{2}{Name2}]
很抱歉,如果sintaxis错误,我的数组收集将从数据库到达。
我在这里做的真实事情是从一个充满id的表和一个充满了这些ides的表中接收值,再加上名称(它们是分开的,因为规范化的家伙!)我想把它们放在数据网格中这只会显示名称。
我说可能未分类,因为第二列可能会达到几个删除和插入的点,并可能最终未排序。但是对于这种情况,我对一个已排序的列有一个未排序的列。
我目前的输出只是打印了一个名字,其余的完全被驳回。
注意:另请注意,nameArray始终为ID表提供MORE或EQUAL值。并且Id表将始终具有与名称表匹配的值。
答案 0 :(得分:1)
除了使用&lt; =而不是&lt;,我不确定你的代码有什么问题,太糟糕了,你不说输出是什么。我写了这个,几乎和你做的一样:
var arr1:ArrayCollection = new ArrayCollection([{id:1, name:""}, {id:2, name:""}, {id:3, name:""}]);
var arr2:ArrayCollection = new ArrayCollection([{id:1, name:"1"}, {id:3, name:"3"}, {id:2, name:"2"}, {id:4, name:"4"}]);
for (var i:int=0; i<arr1.length; i++)
{
for (var j:int=0; j<arr2.length; j++)
{
if (arr1[i].id==arr2[j].id)
{
arr1[i].name = arr2[j].name;
trace(arr1[i].id,arr1[i].name);
}
}
}
似乎可以解决问题。