有两个关联数组,如何将其中一个关联数组添加到另外一个数组中,当然关联数组中得有一个相同的属性,该属性性对于源数组是唯一的,对于目标数组可以重复或为空。这就好像是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数组,已经添加了老师的姓名和年龄。