Array類型數組
ECMAScript數組與其它語言數組同樣,都是數據的有序列表。可是ECMAScript數組的每一項能夠保存任何類型的數據。並且,ECMAScript數組是能夠動態調整的。函數
1.建立和修改數組spa
·建立數組code
1 var colors=new Array(20); //建立長度位20的數組 2 var colors=Array(20); //能夠省略new操做符 3 var colors=Array("red","blue","green"); 4 5 //數組字面量表示法 6 var colors=["red","blue","green"]; 7 var values=[1,2,3];
·修改數組對象
1 var colors=["red","blue","green"]; 2 alert(colors[0]); //顯示第一項 3 colors[2]="black"; //修改第三項 4 colors[3]="brown"; //新增第四項
·數組的length活用blog
數組的length不是隻讀的,從新設置length能夠移出項,修改項,新增項,修改數組的長度。排序
2.檢測數組----Array.isArray()索引
3.轉換方法
隊列
toString():返回以逗號隔開的字符串 丨 valueOf():返回的是數組 丨 alert():會在後臺調用toString()方法,而不是toLocaleString()方法 丨 join():參數是符號,此符號將代替逗號隔開字符串ip
4.棧方法和隊列方法
棧方法:push():在末尾添加 pop():得到最後一項並移除
隊列方法:shift():在首項移除 unshift():在首項添加
5.數組重排序
reverse()方法:反轉數組的順序 丨 sort()方法:按照傳入的函數從新排序
比較函數:
1 function compare(value1,value2){ 2 return value2-value1; 3 };
6.操做方法
concat():先複製已有的數組,而後將參數添加到副本的末尾,若是參數是值,則直接添加,若是參數是數組,則將每一項都添加到副本的末尾。往一個數組後面加不少項用此方法。
1 var colors=["red","green","blue"]; 2 var colors2=colors.concat("yellow",["black","brown"]); 3 alert(colors); //red,green,blue 4 alert(colors2); //red,green,blue,yellow,black,brown
slice():從原數組中截取某一部分用此方法
1 var colors=["red","blue","green","black","yellow"]; 2 var colors2=colors.slice(1); //從第二個數到最後 3 var colors3=colors.slice(1,4); //從第二個數到第五個數,可是不包括第五個數 4 alert(colors2); //blue,green,black,yellow 5 alert(colors3); //blue,green,black 6 //若是參數裏有負數,則用數組長度加上該數來肯定相應的位置
splice():最強大的數組操做方法
1 /*spice()方法是最強大的數組方法,它有三個參數 ,依次爲起始位置,要刪除的項數,要添加的項*/ 2 var colors=["red","green","blue"]; 3 var removed=colors.splice(0,1); /*刪除第一行*/ 4 alert(colors); /*green,blue*/ 5 alert(removed); /*red,返回的數組中只包含一項,即刪除的那一項*/ 6 7 removed=colors.splice(1,0,"yellow","orannge"); //從位置一開始插入兩項 8 alert(colors); //green,yellow,orange,blue注意,yellow在位置1 9 alert(removed); //返回的是一個空數組 10 11 removed=colors.splice(1,1,"red","purple"); //插入兩項,刪除一項 12 alert(colors); //green,red,purple,orange,blue 13 alert(removed); //yellow,返回的數組中只包含一項 14 /*注意,splice()返回的是刪除的項,而不是改變後的原數組*/
7.迭代方法
every():每一項運行函數,只有每一項都返回true,最後才返回true
some():每一項都運行函數,任一項返回true最後就會返回true
forEach():不會返回值,做用其實和for循環同樣
filter():每一項運行函數,返回該函數會返回true的項組成的數組
map():每一項都運行函數,返回每次函數調用的結果組成的數組
1 /*every()和some()返回true或者false,不一樣的是,運行函數,every要求函數對每一項都返回true纔會返回true,而some只要求任一項返回true就返回true*/ 2 var numbers=[1,2,3,4,5,4,3,2,1]; 3 4 var everyResult=numbers.every(function(item,index,array){ 5 return(item>2); 6 }); 7 alert(everyResult); //false 8 9 var someResult=numbers.some(function(item,index,array){ 10 return(item>2); 11 }); 12 alert(someResult); //true 13 14 /*filter()每一項運行函數,返回該函數會返回true的項組成的數組*/ 15 var numbers=[1,2,3,4,5,4,3,2,1]; 16 var filterResult=numbers.filter(function(item,index,array){ 17 return(item>2); 18 }); 19 alert(filterResult); //[3,4,5,4,3] 20 21 /*forEach()不返回值,做用其實for循環同樣*/ 22 23 /*map()方法:每一項運行函數,返回每次函數調用的結果組成的數組*/ 24 var numbers=[1,2,3,4,5,4,3,2,1]; 25 var mapNumbers=numbers.map(function(item,index,array){ 26 return item*2; 27 }); 28 alert(mapNumbers); //2,4,6,8,10,8,6,4,2
8.歸併方法
reduce()和reduceRight()方法都會迭代數組的每一項,而後構建一個最終返回的值。reduce()正序,reduceRight()逆序。這兩個方法都接收兩個參數:在每一項上調用的函數和最爲歸併的初始值。而這個函數接收4個參數
前一個值,當前值,項的索引和數組對象。這個函數返回的任何值都會做爲一個參數返回給下一項。第一次迭代發生在數組的第二項,所以,第一個參數是數組的第一項,第二個參數是數組的第二項。
1 var values=[1,2,3,4,5]; 2 var sum=values.reduce(function(prev,cut,index,array){ 3 return prev+cut; 4 },5); 5 alert(sum); //20 6 /*這兩個方法都接收兩個參數:一個在每一項上調用的函數和(可選)做爲歸併基礎的初始值。傳給reduce()和reduceRight()的函數接收4個參數 7 前一個值,當前值,項的索引和數組對象。這個函數返回的任何值都會做爲第一個參數自動傳給下一項。第一次迭代發生在數組的第二項。所以第一個參數是數組的第一項 8 第二個參數是數組的第二項。 9 * */
9.位置方法
indexOf():正序索引 lastIndexOf():逆序索引 在比較參數和數組中的項時,必須嚴格相等,至關於使用===操做符,沒有找到返回-1
1 var numbers=[1,2,3,4,5,4,3,2,1]; 2 alert(numbers.indexOf(4)); //3 3 alert(numbers.lastIndexOf(4)); //5 4 5 alert(numbers.indexOf(4,4)); //5 從第五的數開始日後檢索,因此第一個4並無被檢索到 6 alert(numbers.lastIndexOf(4,4)); //3 從倒數第五個數開始檢索 7 8 var person={name:"Nicholas"}; 9 var people=[{name:"Nicholas"}]; 10 11 var morePeople=[person]; 12 13 alert(people.indexOf(person)); //-1 14 alert(morePeople.indexOf(person)); //0