2015年9月24日 星期四

( 2 ) JavaScript. The Definitive Guide ( 第 7~8 章 )

第7章 數組
數組是值的有序集合。每個值叫做一個元素,而每個元素在數組中有一個位置,以數字表示,稱為索引。數組元素可以是任意類型。數組的元素甚至也可能是對象或其他數組,這允許創建複雜的數據結構,如對象的數組和數組的數組。

7.1 創建數組
1. 使用數組直接量是創建數組最簡單的方法,在方括號中將數組元素用逗號隔開即可。
var empty = [];                        //沒有元素的數組
var primes = [2 , 3, 5, 7, 11];  //有 個數值的數組
var misc = [ 1.1 , true, "a" , ]; // 個不同類型的元素和結尾的逗號
var base = 1024;
var table = [base , base+1 , base+2 , base+3]; 
var b = [[1 , {X:1 , y:2}] , [2 , {X:3 , y:4}]];
var count = [1 ,, 3];               //數組有 個元素,中間的那個元素值為 undefined
var undefs = [,,];                   //數組有 個元素,都是 undefined
2. 構造函數 Array( ) 是創建數組的另一種方法。
a. 調用時沒有參數   var a = new Array( );
b. 調用時有一個數值參數,它指定長度:var a = new Array(10)
c. 顯式指定兩個或多個數組元素或者數組的一個非數值元素:var a = new Array(5 , 4, 3, 2, 1 , "testing, testing")
7.2 數組元素的讀和寫
使用[ ]操作符來訪問數組中的一個元素。數組的引用位於方括號的左邊。方括號中是一個返回非負整數值的任意表達式。使用該語法既可以讀又可以寫數組的一個元素。

7.3 稀疏數組
稀疏數組就是包含從0開始的不連續索引的數組。

7.4 數組長度
每個數組有一個 length 屬性,length 屬性值代表數組中元素的個數。

7.5 數組元素的添加和刪除
添加
Case1:
a = [ ] //開始是一個空數組
a[0] = "zero"; //然後向其中添加元素
a[l] = "one";

Case2:
a = [ ]; / /開始是一個空數組
a.push("zero") //在末尾添加一個元素。 = ["zero"]
a.push("one", "two") //再添加兩個元素。 = ["zero ", "one" , "two"]

刪除
a = [1 , 2, 3];
delete a[l];   // 在索引 的位置不再有元素
1 in a              // => false: 數組索引 並未在數組中定義
a.length          // => 3:delete 操作並不影響數組長度
如果從數組中刪除一個元素,它就變成稀疏數組。

7.6 數組遍歷
使用 for 循環是遍歷數組元素最常見的方法:

var keys = object.keys(0);                    //獲得0對象屬性名組成的數組
var values = []                                      //在數組中存儲匹配屬性的值
for(var i = 0; i < keys.length; i++) {    //對於數組中每個索引
var key = keys[i];                              //獲得索引處的鍵值 /
values[i] = o[key];                            //在 values 數組中保存屬性值
}
<尚有許多資料;待全部粗看一遍後再回來看>

7.7 多維數組
JavaScript 不支持真正的多維數組,但可以用數組的數組來近似。
//創建一個多維數組
var tab1e = new Array(10); //表格有10行
for(var i = 0 i < tab1e.1ength i++)
tab1e[i] = new Array(10) //每行有 10列
//初始化數組
for(var row = 0 row < tab1e.1ength row++) {
for(col = 0 col < tab1e[row].lengthcol++) {
tab1e[row][col] = row*col
//使用多維數組來計算(查詢)5*7

var product = tab1e[5][7] // 35

7.8 數組方法
7.8.1 join( ) -- Array.join( ) 將數組中所有元素都轉化為字符串井連接在一起,返回最後生成的字符串。
可以指定一個可選的字符串在生成的字符串中來分隔數組的各個元素。如果不指定分隔符,默認使用逗號。如
var a = [1 , 2, 3]; //創建一個包含三個元素的數組
a.join(); // =>"1,2,3"
a.join(" "); // => "1 2 3"
a.join(""); // => "123"
var b = new Array(10); //長度為 10 的空數組
b.join('-') // => '---------': 9個連字號組成的字符串
Array.join( ) 方法是 String.split( ) 方法的逆向操作,後者是將字符串分割成若干塊來創建一個數組。

7.8.2 reverse( ) --  Array.reverse( ) 
將數組中的元素顛倒順序,返回逆序的數組。它採取了替換;換句話說,它不通過重新排列的元素創建新的數組,而是在原先的數組中重新排列它們。例如,
var a = [1 , 2, 3];
a.reverse().join()    // => "3,2,1" ,並且現在的a是 [3,2,1]

7.8.3 sort( )
將數組中的元素排序井返回排序後的數組
var a = new Array("banana" , "cherry""apple");
a.sort();

var s = a.join(""); // 5 == "applebananacherry"
如果數組包含 undefined 元素,它們會被排到數組的尾部。

7.8.4 concat( )
創建井返回一個新數組,它的元素包括調用 concat() 的原始數組的元素和 concat() 的每個參數。如果這些參數中的任何一個自身是數組,則連接的是數組的元素,而非數組本身。但要注意, concat() 不會遞歸扁平化數組的數組。concat()不會修改調用的數組。

var a = [1 , 2, 3];
a.concat(4, 5)//返回 [1,2,3,4,5]
a.concat([4, 5]);//返回 [1,2,3,4,5]
a.concat([4, 5] , [6 , 7])//返回 [1,2,3,4,5,6,7]
a.concat(4, [5 , [6 , 7]])//返回 [1,2,3,4,5,[6,7]]

9/26 P153 PDF/P165

7.8.5 slice()
它的兩個參數分別指定了片段的開始和結束的位置。
var a = [1 , 2, 3, 4, 5];
a.slice(O, 3); //返回 [1 3]
a.slice(3); //返回 [4 5]
a.slice(l, -l); //返回 [2 4]
a.slice(-3 , -2); //返回 [3] 而 -3 指定了倒數第三個元素。

7.8.6 splice()
splice() 能夠從數組中刪除元素、插入元素到數組中或者同時完成這兩種操作。在插入或刪除點之後的數組元素會根據需要增加或減小它們的索引值,因此數組的其他部分仍然保持連續的。 splice() 的第一個參數指定了插入和(或)刪除的起始位置。第二個參數指定了應該從數組中刪除的元素的個數。如果省略第二個參數,從起始點開始到數組結尾的所有元素都將被刪除。 splice() 返回一個由刪除元素組成的數組,或者如果沒有刪除元素就返回一個空數組。
var a = [12345678];
a.splice(4); // 返回 [5678]; a 是 [1234]
a.splice(12); // 返回 [2,3]; a 是 [14]
a.splice(11); // 返回 [4]; a 是 [1]

splice() 的前兩個參數指定了需要刪除的數組元素。緊隨其後的任意個數的參數指定了需要插入到數組中的元素,從第一個參數指定的位置開始插入。例如:
var a = [1,2345]
a.splice(2
0'a''b') // Returns [ ]; a is [1,2'a''b'345]
a.splice(2
2[12]3) // Returns ['a''b']; a is [12[12]3345]
7.8.7 push()和 pop()
push() pop() 方法允許將數組當做棧來使用。 push() 方法在數組的尾部添加一個或多個元素,井返回數組新的長度。 pop() 方法則相反 它刪除數組的最後一個元素,減小數組長度井返回它刪除的值。
var a = [ ];               // a:[ ]
a.unshift(1)
;            // a[1] Returns1
a.unshift(22)
;          // a[221] Returns 2
a.shift()
;                  // a[1] Returns 22
a.unshift(3,[4,5])
// a[3[45]1] Returns 3
a.shift()
                 // a[[45]1] Returns 3
a.shift()
;                 // a[1] Returns[45]
a.shift()
;                 // a[ ] Returns 1































































123456

沒有留言:

張貼留言