2009年5月19日 星期二

JavaScript Array內建函數

JavaScript基礎之Array,你精通了嗎? - iammonster - JavaEye技術網站

一、 學好JavaScript的基礎,Array類是必不可少的,也許你每天都在寫JS,那麼對於Array類,你到底用了多少呢?下面列舉一下Array類內置的方法:

1、構造方法:

Js代碼

1. var a = new Array(); //創建Array對象
2. var a = new Array;//創建Array對象
3. var a = new Array(10);//創建Array對象,並指定數組中項的個數
4.
5. var a = new Array("a","b","c"); //數組a,b,c
6. var a = ["a","b","c"];//數組a,b,c
7.
8. var a =[["a","b","c"],[1,2,3]];//多維數組

var a = new Array(); //創建Array對象
var a = new Array;//創建Array對象
var a = new Array(10);//創建Array對象,並指定數組中項的個數

var a = new Array("a","b","c"); //數組a,b,c
var a = ["a","b","c"];//數組a,b,c

var a =[["a","b","c"],[1,2,3]];//多維數組



2、toString、valueOf


Js代碼

1. //把數組轉化為","號隔開的字符串?很簡單:
2. var a =["a","b","c"];
3. var s = a.toString();
4. alert(s);
5. var s2 = a.valueOf();
6. alert(s2);

//把數組轉化為","號隔開的字符串?很簡單:
var a =["a","b","c"];
var s = a.toString();
alert(s);
var s2 = a.valueOf();
alert(s2);






3、join

Js代碼

1. //厭倦了","號隔開的字符串?那麼:
2. var a =["a","b","c"];
3. var s = a.join("-");//想用什麼隔開呢?在這裡寫吧,當然","也是可以的
4. alert(s);

//厭倦了","號隔開的字符串?那麼:
var a =["a","b","c"];
var s = a.join("-");//想用什麼隔開呢?在這裡寫吧,當然","也是可以的
alert(s);


4、split

Js代碼

1. //反悔了?倒過來把字符串轉化為數組?
2. var s = "a-b-c";
3. var a =s.split("-");
4. alert(a);

//反悔了?倒過來把字符串轉化為數組?
var s = "a-b-c";
var a =s.split("-");
alert(a);


5、concat

Js代碼

1. //用for循環來合併?沒那麼麻煩
2. var a1 = new Array(1,2,3);
3. var a2 = new Array("a","b","c");
4. var a3 = a1.concat(a2);
5. alert(a3);

//用for循環來合併?沒那麼麻煩
var a1 = new Array(1,2,3);
var a2 = new Array("a","b","c");
var a3 = a1.concat(a2);
alert(a3);


6、splice

Js代碼

1. //刪除?很靈活
2. var a1 = new Array(1,2,3);
3. var a2 = new Array("a","b","c");
4. var a3 = a1.concat(a2);
5. alert(a3);
6. var a4 = a3.splice(1,2); //從a3中刪除從下標為1開始的2項,返回刪除的結果給a4
7. alert(a3+" "+a4);

//刪除?很靈活
var a1 = new Array(1,2,3);
var a2 = new Array("a","b","c");
var a3 = a1.concat(a2);
alert(a3);
var a4 = a3.splice(1,2); //從a3中刪除從下標為1開始的2項,返回刪除的結果給a4
alert(a3+" "+a4);


7、push、pop

Js代碼

1. //棧的數據結構要自己來寫?不需要
2. var a1 = new Array(1,2,3);
3. var a2 = a1.push(4); //頂部壓入4,返回壓入的對象
4. alert(a1+" "+a2);
5. var a3 = a1.pop(); //頂部彈出頂部第一個對象,返回彈出對象
6. alert(a1+" "+a3);

//棧的數據結構要自己來寫?不需要
var a1 = new Array(1,2,3);
var a2 = a1.push(4); //頂部壓入4,返回壓入的對象
alert(a1+" "+a2);
var a3 = a1.pop(); //頂部彈出頂部第一個對象,返回彈出對象
alert(a1+" "+a3);




8、shift、unshift

Js代碼

1. //倒轉棧結構?來得更輕鬆
2. var a = new Array(1,2,3);
3. var i1 = a.shift(); //刪除數組的第一項,將其作為函數返回值
4. alert(i1+" "+a);
5. var i2 = a.unshift(1); //加入一項放在數組的第一個位置,原來的項分別往下移一個位置
6. alert(i2+" "+a);

//倒轉棧結構?來得更輕鬆
var a = new Array(1,2,3);
var i1 = a.shift(); //刪除數組的第一項,將其作為函數返回值
alert(i1+" "+a);
var i2 = a.unshift(1); //加入一項放在數組的第一個位置,原來的項分別往下移一個位置
alert(i2+" "+a);


9、sort,reverse

Js代碼

1. //排序?簡單,但是它是按照字符串排序的哦儘管是數字
2. var a = new Array(1,2,6,3,9,5,7);
3. a.sort();
4. alert(a);
5. var a = new Array(1,2,6,3,9,5,27);//注意這裡排序會讓你意外哦[1,2,27,3,5,6,9]
6. a.sort();
7. alert(a);
8. //想倒序?
9. a.reverse();
10. alert(a);

//排序?簡單,但是它是按照字符串排序的哦儘管是數字
var a = new Array(1,2,6,3,9,5,7);
a.sort();
alert(a);
var a = new Array(1,2,6,3,9,5,27);//注意這裡排序會讓你意外哦[1,2,27,3,5,6,9]
a.sort();
alert(a);
//想倒序?
a.reverse();
alert(a);


10、再論splice

Js代碼

1. //第6條中已經說明了它的刪除功能,它還能插入、替換
2. var a =["a","d","e"];
3. a.splice(1,0,'b','c'); //在位置1(即d)處刪除0個項,並插入['b','c'],即插入
4. alert(a);
5. a.splice(3,2,'dd','ee'); //在位置3處刪2個項,並插入['dd','ee'],即替換
6. alert(a);

//第6條中已經說明了它的刪除功能,它還能插入、替換
var a =["a","d","e"];
a.splice(1,0,'b','c'); //在位置1(即d)處刪除0個項,並插入['b','c'],即插入
alert(a);
a.splice(3,2,'dd','ee'); //在位置3處刪2個項,並插入['dd','ee'],即替換
alert(a);


二、再看看判斷一個對象是否為Array對象的方法
Js代碼

1. isArray: function(object) {
2. return object != null && typeof object == "object" &&
3. 'splice' in object && 'join' in object;
4. }

isArray: function(object) {
return object != null && typeof object == "object" &&
'splice' in object && 'join' in object;
}

這個是抄襲prototype的,看看吧,對象不為空且對像類型為object且該對象有splice方法和join方法。也對對你有所啟發,畢竟JS有它的特色。

三、一些有用的擴展:
Js代碼
  1. input type="button" value="測試獲取數組下標" onclick="testIndexOf()"

  2. --scrip--

  3. // use native browser JS 1.6 implementation if available
  4. if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
  5. i || (i = 0);
  6. var length = this.length;
  7. if (i < 0) i = length + i;
  8. for (; i < length; i++)
  9. if (this[i] === item) return i;
  10. return -1;
  11. };
  12. function testIndexOf()
  13. {
  14. var a =[1,2,3];
  15. alert(a.indexOf(2));
  16. }
上面的舉例獲取數組中某項的下標,還有像:把數組裡的項唯一化(uniq)、最後一個位置(lastIndexOf)等等,你都可以擴展。並且你可以借鑑prototype的庫,mootools的庫等等,裡面的有些寫法很是經典,可以學習學習。
四、要干活了,不再囉嗦:
上面囉嗦了一堆,想說明的不外乎兩點:1、注重JS基礎,別雲裡來霧裡去;2、學習經典庫的寫法,借鑑總是能幫你少走一些彎路,但是走走彎路也是挺好好處,自己掂量掂量吧。