? ? ? 今天在做项目的过程中使用了一下关联数组,在判断关联数组是否为空时,碰见了一个问题,利用数组中常用到的length属性,发现在关联数组明确有值的情况下,返回值为0,让我很是郁闷,看了下开发指南,发现是length属性用在关联数组上时是返回0.
? ? ? ?思考了一下,采用下面的办法进行解决:计算关联数组中Key元素的个数。
下面是辅助类:
?
?
package com.jack.min
{
public class AssociationArrayUtil
{
public function AssociationArrayUtil()
{
}
//通过计算关联数组中元素的key的个数是否为0来判断关联数组是否为空
public static function getLength(array:Array):uint
{
// 设置一个变量来保存关联数组元素的个数
var count:uint = 0;
for (var key:Object in array)
{
count++;
}
return count;
}
public static function isEmpty(array:Array):Boolean
{
return getLength(array) == 0 ? true : false;
}
}
}
?
?
引入的测试的文件如下:
?
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"?
? xmlns:s="library://ns.adobe.com/flex/spark"?
? xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="init()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import com.jack.min.AssociationArrayUtil;
private var arr:Array = [];
private var arr1:Array = [];
private function init():void
{
arr["Nanjing"] = "Jiangsu";
arr["Hangzhou"] = "Zhejiang";
arr["Jinan"] = "Shangdong";
trace("AssociationArray arr's length is: " + AssociationArrayUtil.getLength(arr));
trace("AssociationArray arr is empty : " + AssociationArrayUtil.isEmpty(arr));
trace("-------------------------------------------------------");
trace("AssociationArray arr1's length is: " + AssociationArrayUtil.getLength(arr1));
trace("AssociationArray arr1 is empty : " + AssociationArrayUtil.isEmpty(arr1));
}
]]>
</fx:Script>
</s:Application>
?
输出结果为:
?
AssociationArray arr's length is: 3
AssociationArray arr is empty : false
-------------------------------------------------------
AssociationArray arr1's length is: 0
AssociationArray arr1 is empty : true
?
?
就达到了功能。
? ? ? 可能这个方法有点笨拙,也需要遍历整个关联数组,但是并没有处理数组中的每个元素,我做的是需要将关联数组中的key和值拼装成一个字符串使用,达到了我的功能。
? ? ?希望大家有更好的办法能指点下我,谢谢!