如何匹配两个不同长度的数组中的值,可能未分类

时间:2011-03-09 19:40:12

标签: actionscript

我想将一个值与另一个数组中的所有值进行比较,然后找到匹配项。它们的长度不同。

想象一列未分类的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表将始终具有与名称表匹配的值。

1 个答案:

答案 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);
        }
    }
}

似乎可以解决问题。