Flex3数组处理类 MyArrayUtils.as

最近做项目用了很多共通的处理类,贴出来共享一下,如有不对之处,请指正,欢迎交流。

 

////////////////////////////////////////////////////////////////////////////////
//
//  My System
//  Copyright 2008-2009 My Systems Incorporated
//  All Rights Reserved.
//
//  NOTICE: My System permits you to use, modify, and distribute this file
//  Langversion ActionScript 3.0
//  playerversion Flash 9.0
//  DATE: 2009-03-22 keren
//  QQ: 994251681
//  MSN: keren1515@hotmail.com
//
////////////////////////////////////////////////////////////////////////////////
package org.app.utils.common
{
 import com.hurlant.eval.ast.NullType;
 
 public class MyArrayUtils
 {
  public function MyArrayUtils(single:SingletonEnforcer)
  {
   if(single==null)throw new Error("This class is singletonEnforcer.");
  }
  ////////////////////////////////////////////////////////////////////////
  /**
   * 把一个带有标识的字符串转换成数组
   * @param String src 源串
   * @param String flg 标识
   *
   * @return Array 数组
   */
  public static function toArray(src:String, flg:String):Array{
   return src.split(flg);
  }
  ////////////////////////////////////////////////////////////////////////
  /**
   * 把新元素加入到数组中
   * @param Array target 要被操作的数组
   * @param boolean flg 添加的位置,true:在尾部 false:在头部
   * @param newItems 新的元素(一个或多个以逗号隔开的元素,或一个数组)
   *        eg: "a","b","c"
   *
   * @return Array 数组
   */
  public static function addItem(target:Array, flg:Boolean=true, ... newItems):Array{
   if(flg){//在array的尾部添加
    target.push(newItems);
   }else{//在头部加
    target.unshift(newItems);
   }
   return target;
  }
  /**
   * 把新元素加入到数组中的指定位置后面
   * @param Array target 要被操作的数组
   * @param boolean startIndex 添加的位置
   * @param newItems 新的元素(一个或多个以逗号隔开的元素,或一个数组)
   *
   * @return Array 数组
   */
  public static function addItemByIndex(target:Array, startIndex:int=0, ... newItems):Array{
   var length:int = target.length;
   if(startIndex>length){
    //throw new Error("添加的位置大于数组的长度,请重新确认!");
    startIndex = length-1;
   }
   return target.splice(startIndex,0,newItems);
  }
  ////////////////////////////////////////////////////////////////////////
  /**
   * 删除数组中的头或尾元素
   * @param Array target 要被操作的数组
   * @param boolean flg 删除的位置,true:在尾部 false:在头部
   *
   * @return Array 数组
   */
  public static function dropItem(target:Array, flg:Boolean=true):Array{
   if(flg){//在array的尾部删除 --实现后进先出
    target.pop();
   }else{//在头部删除
    target.unshift();
   }
   return target;
  }
  /**
   * [指定的位置先删除后插入]
   * 删除数组中指定位置的元素,并在指定的位置插入新的元素
   * @param Array target 要被操作的数组
   * @param startIndex 起始位置,其后一个元素将开始被删除
   * @param deleteCount 删除的个数
   * @param newItems 新元素
   *
   * @return Array 数组
   */
  public static function dropItemByIndex(target:Array,
   startIndex:int=0, deleteCount:uint=0, ... newItems):Array{
   var length:int = target.length;
   if(startIndex>length){
    throw new Error("删除的位置大于数组的长度,请重新确认!");
    //startIndex = length-1;
   }
   //从startIndex到结尾还有多少个元素
   var leave:int = length-1-startIndex;
   if(deleteCount>leave){
    deleteCount = leave;
   }
   if(values == null){
    return target.splice(startIndex, delCount);
   }
   return target.splice(startIndex, delCount, newItems);
  }
  ////////////////////////////////////////////////////////////////////////
  /**
   * 在数组的最后新加一个元素
   *
   */
  public static function append(target:Array, newItem:*):Array{
   target[target.length]=newItem;
   return target;
  }
  /**
   * 清空某个数组元素的内容
   *
   */
  public static function empityItem(target:Array, index:int):Array{
   delete(target[index]);//只是删除该元素的内容,把内容改成undefined
   return target;
  }
  ////////////////////////////////////////////////////////////////////////
  /**
   * 重新給数组设置长度
   * @param target 目标数组
   * @param newSize 新的长度
   *
   * @return Array
   */
  public static function resize(target:Array, newSize:uint):Array{
   var length:int = target.length;
   if(newSize > length){//是在放大
    //除了最后一个元素,其他的元素值都是 undefined
    target[newSize] = "";
   }
   else{//截去尾部
    target.length = newSize;
   }
   return target;
  }
  ////////////////////////////////////////////////////////////////////////
  //?????????????????????????
  public static function findMatchIndex(target:Array,
   search:String,startIndex:int=0,
   fullMatch:Boolean=false):int{
   return null;
  }
  //?????????????????????????
  public static function findMatchItem(target:Array,
   search:String,startIndex:int=0,
   fullMatch:Boolean=false):Object{
   return null;
  }
  ////////////////////////////////////////////////////////////////////////
  /**
   * 连接数组成字符串
   */
  public static function join(target:Array, seg:String=","):String{
   return target.join(seg);
  }
  ////////////////////////////////////////////////////////////////////////
  /**
   * 连接多个数组成一个新数组
   * @param target 目标数组
   * @param args 连接对象
   *
   * @return Array 新的数组
   */
  public static function link(target:Array, ... args):Array{
   return target.concat(args);
  }
  ////////////////////////////////////////////////////////////////////////
  /**
   * 排序数组元素,默认是按照ASCII码的升序来排序的.
   * 参数有:
   * CASEINSENSITIVE:忽略大小写
   * DESCENDING:倒序排列
   * UNIQUESORT:如果元素中有相同的元素,就停止排序
   * NUMBERIC:采用数字的ASCII码进行排序
   * 以上这些参数可以整合,如:Array.CASEINSENSITIVE|Array.DESCENDING,
   * 使用“|”竖线连接多个排序常量。
   */
  public static function sort(target:Array,... args):Array{
   return target.sort(args);
  }
  ////////////////////////////////////////////////////////////////////////
  /**
   * 按照关键字排序,通常该数组里面放的是josn对象,然后按照josn对象的key进行排序,
   * eg:Array xx;
   *    xx.push({key1:1,key2:2});
   *
   * xx.sortOn(key1); or xx.sortOn([key1,key2]);
   *
   * 格式:Array.sortOn([关键字1|关键字2|...],[排序常量1|排序常量2|...]);
   *      或
   *      Array.sortOn(关键字,排序常量1|排序常量2|...);
   */
  public static function sortOn(target:Array,
   fieldName:Object,options:Object = null):Array{
   return target.sortOn(fieldName,options);
  }
  ////////////////////////////////////////////////////////////////////////
  /**
   * 实现自定义排序,传入排序函数即可。
   * eg:
   * function 函数名(a:数据类型,b:数据类型):int{
   *  if(a排在b后的条件){
   *   return 1;
   *  }else if(a排在b前的条件){
   *    return -1;
   *  }else{
   *    return 0;
   *  }
   * }
   *
   */
  public static function sortBySelfFunction(target:Array,func:Function):Array{
   return target.sort(func);
  }
  ////////////////////////////////////////////////////////////////////////
  /**
   * 取得数组中某个最大和最小的元素值
   */
  public static function getItem(target:Array, flg:Boolean=false):Object{
   target.sort(Array.NUMERIC);
   if(flg){//取得最大值
    return target[target.length-1];
   }else{
    return target[0];
   }
  }
  public static function getMaxItem(target:Array):Object{
   return getItem(target,true);
  }
  public static function getMinItem(target:Array):Object{
   return getItem(target,false);
  }
  ////////////////////////////////////////////////////////////////////////
  /**
   * 比较2个数组,采用一个个元素对比
   * @param src
   * @param dest
   * @param ignoreSequence 忽略数组元素的比较顺序 true:是 false:否
   *
   * @return true:相等 false:不相等
   */
  public static function equals(src:Array, dest:Array,
    ignoreSequence:Boolean=true):Boolean{
   var length4src:uint = src.length;
   var length4dest:uint = dest.length;
   if(length4src != length4dest)return false;
   for(var i:int=0;i<length4src;i++){
    if(ignoreSequence){
     var flg:Boolean = false;
     for(var k:int=0;k<length4dest;k++){
      if(src[i] == dest[k]){
       flg = true;
       break;
      }
     }
     if(!flg)return false;
    }else{
     if(src[i] != dest[i])return false;
    }
   }
   return true;
  }
  ////////////////////////////////////////////////////////////////////////
  /**
   * 复制数组,如果是深度复制,那么将创建新的数组实例,否则指向同一个实例,其中一个改变
   * 将影响另外一个数组。
   * @param src
   * @param deepClone 深度复制, true:是 false:否,是表示新的数组实例。
   *
   * @return Array
   */
  public static function clone(src:Array,deepClone:Boolean=true):Array{
   var newArr:Array = null;
   if(deepClone){
    newArr = new Array(src.length);
    for(var i:int = 0;i<src.length;i++){
     newArr[i]=src[i];
    }
   }else{
    newArr = src;
   }
   return newArr;
  }
  ////////////////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////////////////
 }//end class
}//end package
class SingletonEnforcer {}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值