1. Array類型
ECMAScript數組和其餘語言中的數組都是有序列表,可是有如下特性:
a.每一項均可以保存任何類型的數據。
b.數組的大小是能夠動態調整。
c.數組的length屬性:可讀可寫,能夠經過設置length的值從數組的末尾移除項或向數組中添加新項前端
1) 建立方法
1. 使用Array構造函數
var arr = new Array();
var arr = new Array(20); // 預先指定數組的大小
var arr = new Array("terry","larry","boss"); //傳入參數
注意:new 關鍵字也能夠省略,可是儘可能不要省略
2. 使用數組字面量
由一對包含數組項的方括號表示,多個數組項之間用逗號分隔
var arr = ["terry","larry","boss"];
var arr = [] //空數組json
2) 訪問數組元素
數組變量名[索引]
1.若是索引小於數組的長度,返回對應項的值
var arr = ["terry","larry","boss"];
arr[0] ; //訪問數組中第一個元素,返回值爲terry
2.若是索引大於數組的長度,數組自動增長到該索引值加1的長度
var arr = ["terry","larry","boss"];
arr[3] ="jacky"; //添加元素,數組程度變爲4數組
數組最多能夠包含4 294 967 295個項函數
3) 檢查數組
var arr = [];
typeOf(arr); //返回object
Array.isArray(arr); //判斷arr是不是數組類型firefox
注:對象
稀疏數組排序
看到迭代數組時,檢查索引值是否是數組的一個屬性。繼承
var ary=[0,1,2];索引
ary[10]=10;隊列
ary.filter(function(x){
return x===undefined;
}); // []
====>
0 in ary;==>true
1 in ary;==>true
2 in ary;==>true
3 in ary;==>flse
10 in ary;==>true
====>
也就是說從3-9都是沒有初始化的「坑」!這些索引並不存在於數組中,在array的函數調用的時候會跳過這些「坑」。
4) 轉換數組爲字符串
數組繼承Object方法,而且對這些方法進行了重寫
toLocalString();
toString(); 在默認狀況下都會以逗號分隔字符串的形式返回數組項
例如:
var arr = ["terry","larry","boss"];
arr.toString() //terry,larry,boss
valueOf(); 在默認狀況下以數組字面量的方式顯示(firefox)
arr.valueOf(); ]//["terry","larry","boss"];
join(); 使用指定的字符串用來分隔數組字符串
例如:
arr.join("||"); //briup||terry||jacky
/*arr -Array-{能夠繼承的方法}-Object*/
var arr = ["terry","tom",1,true,{age:12}];
console.log(arr);
//調用從父對象中繼承的toString方法
console.log(arr.toString());
//調用從父對象中繼承的join方法
console.log(arr.join("-"));
//序列化
var json = JSON.stringify(arr);
console.log(json);
5) 棧,隊列方法
1.棧 LIFO (Last-In-First-Out)
push() 可接受任意類型的參數,將它們逐個添加到數組的末尾,並返回數組的長度
pop() 從數組的末尾移除最後一項,減小數組的length值,返回移除的項
2.隊列 FIFO (First-In-First-Out)
shift() 移除數組中的第一個項而且返回該項,同時將數組的長度減一。
unshift() 在數組的前端添加任意個項,並返回新數組的長度。
6) 排序
reverse() 反轉數組項的順序
sort()
1.默認排序:該方法會調用每一個數組項的toString() 轉型方法,而後排序
2.自定義排序:
a.該方法能夠接受一個比較函數做爲參數,比較函數有兩個參數
b.若是第一個參數位於第二個參數以前,返回負數
c.若是第一個參數位於第二個參數以後,返回正數
var arr = [11,5,23,7,4,1,9,1];
console.log(arr.sort(compare));
//該比較函數適合於大多數數據類型
function compare(v1,v2){
if(v1>v2){
return -1;
}else if( v1<v2){
return 1;
}else{
return 0;
}
}
var students = [{
name:"terry",
age:12,
salary:3400,
toString:function(){
return "3"
}
},{
name:"tom",
age:13,
salary:1400,
toString:function(){
return "1"
}
},{
name:"vicky",
age:10,
salary:8400,
toString:function(){
return "2"
}
}];
console.log(students);
var result = students.sort((function(key){
//返回比較器函數
return function(a,b){
if(a[key] < b[key]){
return -1;
}else if(a[key] > b[key]){
return 1;
}
}
})("age"));
console.log(students);
console.log(result);
7) 操做方法
concat() :先建立當前數組的一個副本,而後將接收到的參數添加到這個副本的末尾,返回副本
var arr = ["aa","bb","cc","dd"];
var arr_new = arr.concat("ee","ff");
// arr_new = ["aa", "bb", "cc", "dd", "ee", "ff"]// arr不改變
slice() :可接受一個或者兩個參數(返回項的起始位置,結束位置)
當接受一個參數,從該參數指定的位置開始,到當前數組末尾的全部項
當接受兩個參數,起始到結束之間的項,可是不包含結束位置的項
例如:
var arr = ["aa","bb","cc","dd"];
1.接受一個參數時
var arr_new = arr.slice(1);
// arr_new = ["bb", "cc", "dd"],arr 不改變
2.接受兩個參數時
var arr_new = arr.slice(1,2);
// arr_new = ["bb"]; arr不改變
splice() : 向數組的中部插入數據將始終返回一個數組,該數組中包含從原始數組中刪除的項。
刪除:指定兩個參數(刪除的起始位置,要刪除的項數)
插入:指定三個參數(起始位置,0,要插入的項任意數量的項)
替換:指定三個參數(起始位置,要刪除的項,要插入的任意數量的項)
例如: var arr = ["aa","bb","cc","dd"]; 1.刪除 var del_arr = arr.splice(1,2); // arr = ["aa","dd"]; 在原數組進行了刪除操做 // del_arr = ["bb","cc"];返回刪除的元素數組 2.插入 var del_arr = arr.splice(1,0,"ee","ff"); // arr = ["aa", "ee", "ff", "bb", "cc", "dd"] 將指定項插入到1位置處 //del_arr = [], 返回空數組 3.替換 var del_arr = arr.splice(1,2,"ee","ff"); // arr = ["aa", "ee", "ff", "dd"] 將"bb","cc" 替換成了"ee","ff" //del_arr = ["bb", "cc"], 返回刪除的元素數組 indexOf()(要查找的項,開始查找的位置(可選)) 從數組開頭向後查找,使用全等操做符,找不到該元素返回-1 var arr = ["22","11","cc","dd","11"]; arr.indexOf(11); //返回-1,由於使用"==="進行匹配 arr.indexOf("11"); //返回1,從前日後匹配,返回第一個匹配元素的位置 lastIndexOf()(要查找的項,開始查找的位置(可選)) 從數組末尾向前查找,使用全等操做符,找不到該元素返回-1 var arr = ["22","11","cc","dd","11"]; arr.lastIndexOf("11"); //返回4,從後往前匹配,返回第一個匹配元素的位置 8) 迭代方法: 參數: 每一項上運行的函數,運行該函數的做用域對象(可選) every();對數組中的每一運行給定的函數,若是該函數對每一項都返回true,則返回true var arr = [11,5,23,7,4,1,9,1]; var result = arr.e every(function(item,index,arr){ return item >2; }); console.log(result); //false some(); 對數組中的每一運行給定的函數,若是該函數對任一項都返回true,則返回true var result = arr.every(function(item,index,arr){ return item >2; }); console.log(result); //true filter();對數組中的每一運行給定的函數,會返回知足該函數的項組成的數組 var result = arr.filter(function(item,index,arr){ return item >2; }); console.log(result); // [11, 5, 23, 7, 4, 9] map();對數組中的每一運行給定的函數,返回每次函數調用的結果組成的數組 var result = arr.map(function(item,index,arr){ return item * 2; }); console.log(result); // [22, 10, 46, 14, 8, 2, 18, 2] forEach();對數組中的每一運行給定的函數,沒有返回值,經常使用來遍歷元素 var result = arr.forEach(function(item,index,arr){ console.log(item); });