<b> 1. length</b><b>屬性用來删除數組元素</b>
<b> </b>假設我們定義了這樣一個數組:
<b> </b>var arr:Array = new Array("first","second","third","four","five");
<b> </b>我想删除後面3個元素,怎麼做最友善呢?
<b> </b>答案:用length屬性!
<b> </b>arr.length = 2;
<b> </b>運作之後,立即達到想要的效果。
<b> </b><b>2. </b><b>用splice删除元素、插入元素</b>
<b> </b>splice是一個非常實用的指令,即可以用來删除元素,也可以用來插入元素,你都會用不?
<b> </b><b>(1) </b><b>删除元素</b>
<b> </b>假設還是上面那個數組,我要删掉中間第2到第4三個值,要怎麼做呢?
<b> </b>答案是:arr.splice(1,3);
<b> </b>如果用arr.splice(2);效果和arr.length = 2一樣!也是删除數組的利器!
<b> </b><b>(2) </b><b>插入元素</b>
<b> </b>如果我要在第二個元素後面插入"old"和"new"這2個元素,要怎麼做呢?
<b> </b>答案是:arr.splice(2,0,"old","new");
<b> </b>splice的參數說明我就不寫了,大家看下幫助文檔吧。這個方法是非常實用的!
<b> </b><b>3. </b><b>怎麼樣才能最友善的複制數組?</b>
<b> </b><b>(1) </b><b>用slice指令複制數組(淺複制)</b>
<b> </b>還是以上面的那個數組為例,我要複制這個數組,怎麼樣最友善呢?
<b> </b>答案:var newarr:Array = arr.slice();
<b> </b>這裡我提到一個淺複制的概念。什麼是淺複制呢?就是說,如果這個數組和示例中那樣,都是由基中繼資料組成(int、uint、number、string等),那麼用slice方法可以完全複制!但如果這個數組的元素包含object,那麼複制下來的隻是一個指針,如果對該元素做修改,原來那個數組的該元素也同樣會被修改,是以叫淺複制!
<b> </b>我舉個例子,在第一幀寫入代碼如下:
<b> </b>var tobj:Object = {tt:5}; //定義一個object
<b> </b>var tarr:Array = new Array(tobj); //定義一個數組
<b> </b>var carr:Array = tarr.slice(); //用slice方式複制數組
<b> </b>trace(tarr[0].tt); //輸出:5
<b> </b>carr[0].tt = 6; //修改複制的數組的第一項
<b> </b>trace(carr[0].tt); //輸出:6
<b> </b>trace(tarr[0].tt); //輸出:6
<b> </b>從該例子可以清楚的看到,slice隻能實作淺複制,但其實已經非常實用了!
<b> </b><b>(2) </b><b>如何實作深複制?</b>
<b> </b>如果真的有必要用到深複制,那麼隻能自己寫函數了。我下面寫一個示例,實作深複制。用到的具體方法就不詳細叙述了,如果大家有需要直接搬過去用就可以了!
<b> </b>var tobj:Object = {tt:5};
<b> </b>var tarr:Array = new Array(tobj);
<b> </b>var carr:Array = depthCopy(tarr);
<b> </b>carr[0].tt = 6;
<b> </b>//該函數實作深複制
<b> </b>function depthCopy(source:Array) {
<b> </b><b> </b>var by:ByteArray = new ByteArray();
by.writeObject(source);
by.position = 0;
return(by.readObject());
<b> </b>}
這三個方法,在平時的使用中都是很實用的,但也是比較容易被忽視的。希望大家都能熟練這三個用法!
本文轉自 windtoto 51CTO部落格,原文連結:http://blog.51cto.com/windtoto/383920,如需轉載請自行聯系原作者