一.概述:1.數組是無類型的:同一數組的各元素可以是任意類型,也可以是數組或對象;2.索引從0開始,最大到2^32-2=4294967294;最多容納4294967295個元素;3.數組是動態的,根據需要自動增減;創建數組時無需聲明大小,且在大小變化時無需重新分配空間;4.數組可以是索引連續的(非稀... ...
一.概述:
1.數組是無類型的:同一數組的各元素可以是任意類型,也可以是數組或對象;
2.索引從0開始,最大到2^32-2=4294967294;最多容納4294967295個元素;
3.數組是動態的,根據需要自動增減;創建數組時無需聲明大小,且在大小變化時無需重新分配空間;
4.數組可以是索引連續的(非稀疏數組),也可以是不連續的(稀疏數組),對於稀疏數組來說,length比所有元素的索引要大;
5.通常數組的實現是經過優化的,用數字索引來訪問對象比訪問常規對象屬性要快的多.
二.創建數組
1.var empty = []; //名為empty的空數組
2.var primes = [1,2,3,4]; //4個元素的數組
3.var misc = [1.1, true, "a",];//包含3個類型和逗號的數組
4.
var base = 1;
var table = [base, base+1, base+2, base+3];//可以包含表達式
5.var b = [[1,{x:1,y:2}],[2,{x:3,y:4}]];//包含對象直接量或其它數組直接量
6.var count = [1, ,3];//第2個元素為undefined
7.var defs = [ , , ];//數組含2個元素,都是undefined,數組直接量的語法允許有可選的結尾的逗號,所以該數組只有2個元素;
8.var a = new Array();//調用Array()函數,無參,相當於創建空數組;
9.var a = new Array(10);//調用Array()函數,創建長度為10的函數;
10.var a = new Array(5,4,3,"testing, testing");//參數即為新數組的元素,即有4個元素,3個整型+1個字元串;
三.數組元素的添加/刪除
1.為新索引賦值,即可添加,如a[2]=2;
2.push()方法在數組末尾添加,如a.push(2),該方式與a[a.length]一致
3.unshift()方法在數組首部添加,其它元素依次後移
4.delete刪除數組元素,刪除時數組長度不變,該位置不再有元素,非稀疏數組變成稀疏數組
如:a = [1,2,3]
delete a[1];
刪除索引為1的元素之後,a.length=3; console.log(a[1])會返回undefined;該數組變為稀疏數組
四.數組遍歷
1.常規for迴圈
var a =[1,2,3, null, ,];
delete a[1];
var len = a.length;
console.log(len);//5
for(var i = 0; i<a.length; i++){
//跳過null/undefined以及不存在的元素
// if(!a[i])
// continue;
//console.log(a[i]);//1 3
//跳過undefined和不存在的元素
// if(a[i]===undefined)
// continue;
//console.log(a[i]);//1 3 null
//跳過不存在的元素
if(!(i in a))
continue;
console.log(a[i]);//1 3 null
}
2.forEach
求以下數組各元素的平方和
var a =[1,2,3, null, ,];
delete a[1];
var sq=0;
a.forEach(function(x){
sq += x*x;
});
console.log(sq);//1+9=10
五.多維數組
javaScript不支持真正的多維數組,可以用數組的數組來近似;
舉例:模擬9*9乘法表
var table = new Array(10);
for(var i =0; i<table.length; i++){
table[i] = new Array[10];
}
for(var row = 0; row < table.length; row++){
for(var col=0;col<table[row].length;col++){
table[row][col]=rol*col;
}
}
console.log(table[5][7]);//35
六.數組方法
1.join():將數組元素拼接成一個字元串;返回最終形成的字元串,是String.split()的逆操作;數組沒有split()方法.
2.reverse():將數組顛倒順序,返回逆序數組.註意是修改原數組,而不是生成新數且;
3.sort():返回排序後的數組;
1.不帶參數時,以字母表順序排序(如有必要將臨時轉為字元串比較);
2.若包含undefined函數,會被排到數組的尾部;
3.若自定義規則,需傳入函數;假設第一個參數在前,應該返回一個小於0的數;
舉例1:
var a = [33,4,1111,222];
// a.sort();
// console.log(a);//字母表順序[1111, 222, 33, 4]
// a.sort(function(x,y){
// return x-y;
// });
// console.log(a);//[4, 33, 222, 1111]
a.sort(function(x,y){
return y-x;
})
console.log(a);//[1111, 222, 33, 4]
舉例2:
var b =['ant','Bug','cat','Dog'];
b.sort(function(x,y){
var a = x.toLowerCase();
var b = y.toLowerCase();
if(a>b){
return 1;
}else if(a<b){
return -1;
}else{
return 0;
}
})
console.log(b);//["ant", "Bug", "cat", "Dog"]
4.concat():返回一個由原數組和該方法的參數組成的新數組;
註意:1.參數若為數組,則連接數組中的元素,而非數組本身;
2.不會遞歸扁平化數組的數組;
3.不會修改調用的數組;
舉例:
var a = [1,2,3];
console.log(a.concat(4,5));//[1, 2, 3, 4, 5]
console.log(a.concat([4,5]));//[1, 2, 3, 4, 5]
console.log(a.concat([4,5],[6,7]));//[1, 2, 3, 4, 5, 6, 7]
console.log(a.concat([4,5],[6,[7,8]]));//[1, 2, 3, 4, 5, 6, Array(2)]
5.splice():插入或刪除元素的通用方法;根據參數不同有如下幾種情況:
1.只有一個參數:刪除從這個參數開始(含)直到結尾的元素,並返回由刪除元素組成的數組;
如:var a = [1,2,3,4,5,6,7,8];
console.log(a.splice(4));//[5,6,7,8]
2.兩個參數:第一個參數為起始位置,第二個參數為刪除元素個數(長度),返回由刪除元素組成的數組;
如:var a = [1,2,3,4,5,6,7,8];
console.log(a.splice(2,2));//[3,4]
3.傳入三個及以上參數:執行先刪除,再插入功能.第一個參數指定開始刪除及插入的位置,第二個參數為刪除的長度,第三個及以後的參數作為數組元素插入;
如:var a = [1,2,3,4,5,6,7,8];
console.log(a.splice(2,3,[2,3],4));//[3, 4, 5]
console.log(a);//[1, 2, Array(2), 4, 6, 7, 8]
console.log(a.length);//7
6.push():在數組的尾部添加一個或多個元素(作為棧來使用),並返回新的數組長度;
pop():刪除數組的最後一個元素,減少數組的長度(delete不會減少數組長度),並返回刪除的值;該方法無參數,調用一次只刪除一個元素;
註:兩個方法都是修改並替換原有數組,而非生成新的數組
舉例:
var a = [];
console.log(a.push(1,2,3));//返回數組長度3
console.log(a.pop());//返回刪除的值3
console.log(a.pop());//2
console.log(a.length);//1
7.unshift():從數組頭部添加元素;參數作為數組元素添加;
shifte():從數組頭部刪除一個元素,無參數;
舉例:
var a = [9];
console.log(a.unshift(1,2,3));//在數組頭部添加元素並返回數組長度4
console.log(a);//[1, 2, 3, 9]證明在頭部添加
console.log(a.shift());//返回刪除的元素1(從頭部開始刪除)
8.toString():將數組的每個元素轉化為字元串並輸出以逗號分隔的字元串列表;
toLocalString():使用本地化(和自定義實現的)分隔符將這些字元串連接成最終的字元串;
舉例:
console.log([1,2].toString());//1,2
console.log([1,2].toLocaleString());//1,2