使用ActiotScript连接组合两个Array

有两个关联数组,如何将其中一个关联数组添加到另外一个数组中,当然关联数组中得有一个相同的属性,该属性性对于源数组是唯一的,对于目标数组可以重复或为空。这就好像是SQL中用inner join关键字将两个表通过外键连接起来。看下面的代码:

package com.riafan.utils
{
  public class ArrayUtil
  {
    public static function innerJoin(targetArr:Array, 
                     sourceArr:Array, 
                     key:String):void
    {
      var targetCount:int = targetArr.length;
      var sourceCount:int = sourceArr.length;
      for (var i:int = 0; i < targetCount; i++)
      {
        var targetItem:Object = targetArr[i];
        for (var j:int = 0; j < sourceCount; j++)
        {
          var sourceItem:Object = sourceArr[j];
          if (targetItem[key] == sourceItem[key])
          {
            for(var prop:String in sourceItem) 
            { 
              if(prop != key)
              {
                targetItem[prop] = sourceItem[prop];
              }
            } 
          }
        }
      }
    }
  }
}

注意到我们这里用三层循环,最里层循环将源数组中的所有属性添加到目标数组中,当然作为外键的数组在目标数组中已经存在就不用加了。

使用实例如下:

var students:Array = [
  {sid:201013018, sname:'Jim', sage:17, tid:2163},
  {sid:201013021, sname:'John', sage:18, tid:2163},
  {sid:201013025, sname:'Kite', sage:17, tid:2104}
];

var teachers:Array = [
  {tid:2163, tname: 'Smith', tage:30},
  {tid:2104, tname: 'Tom', tage:32},
  {tid:2102, tname: 'Jane', tage:31}
];

ArrayUtil.innerJoin(students, teachers, 'tid');

trace一下students数组,已经添加了老师的姓名和年龄。

发表评论