今天講js的陣列。陣列是js中最基礎的資料結構了。
主要講講陣列實現棧,佇列以及其他的基本操作。棧和佇列都可以在陣列頭尾位置處理,所以,都有兩種方式。
屬性
1、length : 長度,表示陣列元素的個數。
方法
1、實現棧,先進後出。注意,下面兩組是配對出現。
入棧:Array.unshift(obj) 在陣列第一個元素插入資料
出棧:obj = Array.shift() 取出第一個元素,返回第一個元素後,刪除第一個元素
-------------我是華麗的分割線------------------------------
入棧:Array.push(obj) 在陣列尾部新增一個元素
出棧:obj.pop() 在陣列尾部取出一個元素
2、實現佇列,先進先出。
入隊:Array.push(obj) 在陣列尾部新增一個元素
出隊:obj = Array.shift() 取出第一個元素
-------------我是華麗的分割線------------------------------
入隊:Array.unshift(obj) 從陣列頭插入一個元素
出隊:obj = Array.pop() 從陣列尾部取出一個元素
3、拼接陣列,array = Array.concat(array,array,,,)
all = array1.concat(array2,array3,,,,,,),將array2的頭拼接在array1的尾部,array3拼接在已拼接的array1,array2的後面,舉個栗子。
var parents = ["Jani", "Tove"];
var brothers = ["Stale", "Kai Jim", "Borge"];
var children = ["Cecilie", "Lone"];
var family = parents.concat(brothers, children);
console.log(family) //輸出Jani,Tove,Stale,Kai Jim,Borge,Cecilie,Lone
4、將陣列轉換成字串。string = Array.join()
join()會返回一個字串,並且,原先數組裡面的元素用','隔開。舉個栗子。
var parents = ["Jani", "Tove"];
str = parents.join() // 'Jani,Tove'
所以這樣很適合分割和合成。
5、隨意複製陣列,array = Array.slice(startAt, endAt)
這裡有亮點,所以用粗體,同學們細心了。注意區分 不傳引數,傳入一個引數,傳入兩個引數,還有出入正負數的區別。
5.1 陣列深度複製看栗子
var arr = ['aa','bb','cc']
var arr2 = arr;
arr2.pop();
console.log(arr)//輸出['aa','bb']這是因為arr2 和 arr指向同一個地址 arr == arr2; // true //深度複製的話醬紫做或者醬紫 arr3 = arr.alice(0)
arr3 = arr.slice();//這樣會重新開闢memory,所以arr3的任何操作對arr都沒有影響 arr == arr3; //false
5.2 從第某個元素開始複製後面所有的元素
arr = arr2.slice(2);//arr將arr2[2] -- arr2[arr2.length-1]複製
arr = arr.slice(-2)// arr 將 arr2[arr2.length-1-2] -- arr2[arr2.length-1]複製,,就是倒數的兩項
5.3 取陣列的某幾項,且看栗子
var a = [1,2,3,4,5]; a.slice(0,3); // 返回 [1,2,3] a.slice(3); // 返回 [4,5] a.slice(1,-1); // 返回 [2,3,4] a.slice(-3,-2); // 返回 [3]; IE 4存在的Bug: 返回[1,2,3]
6、隨意改變陣列 array.splice(startAt, removeCount, obj1,obj2,,,,,,)繼續看栗子
var a = [1,2,3,4,5,6,7,8] a.splice(4); // 返回 [5,6,7,8]; a is [1,2,3,4] a.splice(1,2); // 返回 [2,3]; a is [1,4] a.splice(1,1); // Netscape/JavaScript 1.2 返回 4 ,應該返回 [4] a.splice(1,0,2,3); // Netscape/JavaScript 1.2 返回 undefined ,應該返回 []
Bug
方法splice()假定在各種情況下均返回一個包含已刪除元素的陣列。
但是,在 Netscape的JavaScript 1.2直譯器中,如果刪除的是單個元素,那麼該方法返回的是元素,而不是包含那個元素的陣列。
如果沒有刪除任何元素,它不是返回一個空陣列,而是什麼都不返回。
只要把語言版本明確地設定為1.2,JavaScript的Netscape實現都有這種bug行為。
每次都晚上寫,一下就晚了。原創作品,轉載請註明出處:http://zhutty.cnblogs.com
如果你也喜歡與人交流分享,可加群:164858883
如果我的部落格對你有幫助,不吝捐贈。