AS3學習筆記(二)Array數組操做

添加刪除元素:web

查找:indexOf、lastIndexOf,查找的條件是全等匹配,也就是說不會進行類型轉換數組

在數組首尾新增元素:push、unshift函數

push方法:在數組尾部新增一個或多個元素。ui

unshift 方法:在數組頭部新增一個或多個元素設計

push和unshift 方法都有返回值。返回值是增長元素後的數組長度。code

刪除數組首尾元素:pop、shift對象

pop 方法用於將數組最後一個元素刪除。排序

shift方法用於將數組第一個元素刪除,剩餘元素索引值自動減1。索引

pop 和shift 都有返回值。返回值就是那個被刪除的元素。ip

 

splice和slice

splice 刪除數組一段連續的元素,返回被刪除的元素數組;

另外要記住,splice改變了原數組的內容。若是隻是想獲得數組中的一段內容而不想改變原數組,那麼應該使用slice方法。Slice方法不改變原數組內容。

slice 獲取數組中的部分元素;

有兩個參數:一個是截取範圍的起點索引,另外一個是截取範圍的終點索引。slice 的起點和終點索引值均可以是負值。

若是輸入時,不慎將輸入的起點索引設置爲大於終點索引值,那麼slice只會返回一個空數組。

當不傳任何參數給slice方法時,將生成原數組的一個淺複製。

 

排序:revese、sort、sortOn

Revese 方法能將數組元素倒序,返回值是新的數組。

Sort 方法是對數組元素排序。有3 種使用方式,以下。

數組.sort(); //默認排序

數組.sort(排序方式);//使用「排序方式」參數來排序,排序方式是一些定義好的整數常量

數組.sort(比較函數);//使用自定義的比較函數,注意此處只寫函數名便可

當數組原算是複雜數據類型,且須要根據這種對象的某個屬性值來排序時,就須要用到sortOn 方法了。

排序方式,一共有5 種,以下。

Array.CASEINSESITIVES 值爲:1,表示大小寫不敏感按字母順序排序,若是是數字則從小到大

Array.DESCENDING 值爲:2,表示按字母倒序排列

Array.UNIQUESORT 值爲:4,表示必須是惟一性排序,若是比較值結果相同,則放棄排序

Array.RETURNINDEXEDARRAY 值爲:8,讓sort()和sortOn()函數返回值排序後的索引列表,同時保持原數組不變

Array.NUMERIC or16 值爲:16,強制sort()和sortOn()中對數值採用從小到大排序,不然,不設方式,sort()和sortOn()將把數字當成字符串來排序

排序方式能夠同時用多個,使用「|」號隔開。

 

操做數組每一個元素;forEach、every、filter、map、some

在ActionScript3中爲何沒有StringBuilder類呢?其實在ActionScript3的設計過程當中,曾經有過StringBuilder類。但後來,ActionScript3對加法運算符(+)作了修改,使得它在實現複雜字符串(CompoundString)時效率很是高,從而StringBuilder類沒有必要再加進去了。底層原理是由於ActionScript3中的複雜字符串實現是一種繩狀結構,當「+」時,只是把現有的String 對象連接到原有對象後面,不須要頻繁生成新的不變對象。

substring()和slice()也有一些小區別。

substing()的起點和終點不能夠爲負數,即便用了負數,也會被當成0 來處理。slice()的起點和終點不只能夠寫正整數,也能夠寫負數。

 

數組.concat(參數1,參數,參數3…參數n)

concat 可將多個元素或數組拼成一個新的數組,並經過返回值返回,不改變原有數組內容:用法格式以下。參數能夠是一個也能夠是多個。不傳任何參數給concat 方法時,將生成原數組的一個淺複製。

concat和push的不一樣點是:

● concat 不改變原有數組內容,而是生成一個新數組返回。push 直接改變原數組內容。

● 當參數是數組時,concat 和push 的行爲不一樣。concat會將數組分開成各個元素按順序加入,而push則把這個是數組的參數當成一個元素加入原數組後面。

 

淺複製、深複製

什麼時候用淺複製?什麼時候用深複製?

當數組元素所有是基元數據類型(primitive data type)時,即所有是值類型時,複製是沒有淺複製和深複製的分別的。若須要複製,使用下文中的淺複製方法便可。

可是當數組元素全是複雜數據類型(complex data type),即引用類型時,那麼複製就會有兩種選擇:一種是淺複製,一種是深複製。

當數組部分元素是基元數據,部分元素是複雜類型數據時,也要考慮該採起哪一種複製方式:因爲ActionScript3 數組不是類型化數組,容許存儲不一樣類型的數據,所以這種狀況也是很常見的。對於基元數據類型的元素,不論用哪一種方式複製,執行效果都同樣。只有對於複雜數據類型的元素,纔有深複製和淺複製的區別。

由於對Array這個引用類型,「==」判斷的是變量持有對象的引用是否相同,而不是內容相同

使用深複製生成的新數組,其全部元素都是真正的原數組元素的備份。這時兩個數組中相同位置的元素,存放的是不一樣的引用,指向不一樣的對象。可是這兩個對象的狀態是徹底一致的。

若是生成深複製?這就須要使用到強大的ByteArray 類了。方法見示例

var objectElement:Object = {name:"kingda", web:"www.kingda.org"};

var arrayElement:Array = [1,2,3];

var foo:Array = ["a string element", arrayElement, objectElement];

//如下4 行深複製數組foo

var fooBA:ByteArray = new ByteArray();

fooBA.writeObject(foo);

fooBA.position = 0;

var bar:Array = fooBA.readObject() as Array;

trace (bar);

//輸出:a string element,1,2,3,[object Object]
相關文章
相關標籤/搜索