天天看点

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: [email protected]

//

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.");

  }

  public static function toArray(src:String, flg:String):Array{

   return src.split(flg);

  }

  public static function addItem(target:Array, flg:Boolean=true, ... newItems):Array{

   if(flg){//在array的尾部添加

    target.push(newItems);

   }else{//在头部加

    target.unshift(newItems);

   }

   return target;

  }

  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);

  }

  public static function dropItem(target:Array, flg:Boolean=true):Array{

   if(flg){//在array的尾部删除 --实现后进先出

    target.pop();

   }else{//在头部删除

    target.unshift();

   }

   return target;

  }

  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;

  }

  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);

  }

  public static function link(target:Array, ... args):Array{

   return target.concat(args);

  }

  public static function sort(target:Array,... args):Array{

   return target.sort(args);

  }

  public static function sortOn(target:Array,

   fieldName:Object,options:Object = null):Array{

   return target.sortOn(fieldName,options);

  }

  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);

  }

  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;

  }

  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 {}