您好,登錄后才能下訂單哦!
ECMAScript數組的每一項可以保存任何類型的數據,并且數組的大小是可以動態調整的。
創建數組的基本方式有兩種,第一種是使用Array構造函數
1 var colors = new Array();
創建一個含有二十項的數組
1 var colors = new Array(20);
創建一個包含三項的數組
1 var colors = new Array("pink","black","white");
當然也可以省略new操作符
1 var colors = Array(3);
創建數組的第二種基本方式是使用數組字面量表示法
1 var colors = ["red","blue","green"];
數組的項數保存在length屬性中,他不是只讀的,因此通過設置這個屬性,可以從數組的末尾移除項或向數組添加新項
1 colors = 2;2 console.log(colors[2]); //undefined
檢測數組
對于一個網頁或者一個全局作用于而言,使用instanceof操作符就能得到滿意的結果
1 if(colors instanceof Array){//在不同的框架中傳輸時有問題!2 alert("This is a Array");3 }4
ECMAScript5中新增加的方法!(不用管數組是在哪個全局執行環境中創建的)
1 if(Array.isArray(colors)){//2 alert("This is a Array");3 }
轉換方法
所有對象都具有toLocaleString()、toString()、valueOf()方法。其中,調用數組的toString()方法會返回由數組中每個值的字符串形式拼接而成的一個以逗號分割的字符串。而調用valueOf()返回的還是數組。實際上,為了創建這個字符串會調用每一項的toString()方法
1 var colors = ["red", "blue" ,"green"];2 console.log(colors.toString());//red,blue,green 調用每一項的toString方法!3 alert(colors.valueOf()); //red,blue,green 4 alert(colors); //red,blue,green
toLocaleString()方法經常也返回與toString()和valueOf()方法相同的值,但也不總是如此。當調用數組的toLocaleString()方法時,他也會創建一個數組值的以都好分割的字符串,與之前不同的是他會調用每一項的toLocaleString()方法,而不是roString()方法
1 var person1 = { 2 toLocaleString:function(){ 3 return "Nikolaos"; 4 }, 5 toString:function(){ 6 return "Nicholas"; 7 } 8 }; 9 var person2 = {10 toLocaleString:function(){11 return "Grigorios";12 },13 toString:function(){14 return "Greg";15 }16 };17 var people = [person1,person2];18 alert(people); // Nicholas,Greg 19 console.log(people.toString());//Nicholas,Greg 20 console.log(people.toLocaleString());//Nikolaos,Grigorios
join()方法,可以使用不同的分隔符來構建這個字符串,如果不給join()方法傳入任何值,或者給他傳入undefined,則使用逗號作為分隔符
1 var colors = ["red", "blue" ,"green"];2 console.log(colors.join("||")); //red||blue||green
棧方法
棧是一種LIFO(Last-In-First-Out)的數據結構,也就是最新添加的項最早被移除
push()方法可以接受任意數量的參數,把他們逐個添加到末尾,并返回修改后數組的長度
pop()方法從數組的末尾移除一項,減少數組的length值,并返回移除的項
1 var colors = new Array();2 var count = colors.push("red","green");3 alert(count);//24 var item = colors.pop();5 alert(colors); //"red"6 alert(item); //"green"7
隊列方法
隊列數據結構的訪問規則是FIFO(First-In-First-Out)。對列在列表的末端添加項,在列表的前端移除項
shift()能將數組的第一項移除并返回該項,同時數組的長度減1
unshift()會在數組的的前端加任意項,返回數組的長度
1 var colors = new Array();2 var count = colors.push("red","green");3 var item = colors.shift();4 alert(item);// red5 var item = colors.unshift("black","pink");6 alert(item);// 37 alert(colors);//black pink green
同時使用unshift和pop方法可以以相反的方向來模擬隊列
1 var colors = new Array();2 var count = colors.unshift("green","black");3 alert(count);// 24 var count = colors.unshift("pink","white");5 alert(count);//46 var item = colors.pop();7 alert(item);// black
重排序方法
reverse()會反轉數組的順序
sort()會調用每個數組項的toString()方法,然后再按升序排列數組。sort() 可以接受一個比較函數作為參數
1 var num = [1,2,3,4,10,15];2 num.reverse();3 alert(num); //15,10,4,3,2,14 5 num.sort();6 alert(num);//1,10,15,2,3,4
簡單的比較函數
1 function compare(result1,result2){ 2 if(result1<result2){ 3 return -1; 4 } 5 else if(result1>result2){ 6 return 1; 7 } 8 else{ 9 return 0;10 }11 }12 var values = [0,1,5,9,7,10,11];13 14 console.log(values.sort(compare));// [0, 1, 5, 7, 9, 10, 11]
更簡單的方法
1 function compare(result1,result2){2 return result1-result2;3 }4 5 num.sort(compare);6 alert(num);//1,2,3,4,10,15
操作方法
concat()會基于當前數組的所有項創建一個新的數組,具體來說就是,這個方法會創建當前數組的一個副本,然后將接收到的參數添加到這個副本的末尾,最后返回新構建的數組
1 var colors = ["red", "green","black"];2 var colors2 = colors.concat("yellow","white");3 alert(colors2); //red green black yellow white
slice()接受一或者兩個參數,即要返回項的起始位置和結束位置,如果只有一個參數,slice()方法返回從該參數指定位置開始到當前數組末尾的所有項
1 var colors = ["red", "green","black"];2 var colors3 = colors.slice(1,2);3 alert(colors3); //green black
splice()的主要用途是向數組的中部插入項
splice()接受兩個參數時:刪除(刪除第一項的位置,刪除的項數)
三個參數時:插入(插入的位置,0,插入的項1,插入的項2......)
三個參數時:替換(替換的位置,1,加入的項)
1 var colors = ["red", "green","black"];2 var colors4 = colors.splice(1,1);3 alert(colors4); //green4 alert(colors);//red black5 var colors4 = colors.splice(1,0,"yellow");6 alert(colors);// red yellow black 7 var colors4 = colors.splice(1,1,"pink");8 alert(colors);//red pink black
位置方法
indexOf()和lastIndexOf()接受兩個參數(查找的項,查找開始的位置),其中indexOf()是從數組的開頭開始向后查找,而lastIndexOf()是從數組的末尾開始向前查找。這兩個方法返回要查找的項在數組當中的位置,或者在沒有找到的情況下返回-1。在查找時會使用全等操作符
1 var numbers = [1,2,3,4,5,4,3,2,1];2 var item = numbers.indexOf(4);3 alert(item);//34 alert(numbers.lastIndexOf(4));//55 alert(numbers.indexOf(4,4));//56 7 var person = {name:"Nicholas"};8 var morePerson = [person];9 alert(morePerson.indexOf(person));//0
迭代方法
ECMAScript5為數組定義了5個迭代方法,每個方法都接受兩個參數:要在每一項上運行的函數和運行該函數的作用域對象-影響this的值,傳入這些方法中的函數接受三個參數:數組項的值、該項在數組中的位置和數組對象本身
every():對數組中的每一項運行給定函數,如果該函數對每一項都返回true,則返回true
1 var numbers = [1,2,3,4,5,4,3,2,1];2 var everyResult = numbers.every(function(item,index,array){3 return (item>2);4 })5 alert(everyResult);//false
some():對數組中的每一項運行給定函數,如果該函數對任一項返回true,則返回true
1 var someResult = numbers.some(function(item,index,array){2 return(item>2);3 })4 alert(someResult);//true
filter():對數組中的每一項運行給定函數,返回該函數會返回true的項組成的數組
1 var filterResult = numbers.filter(function(item,index,array){2 return(item>2);3 })4 alert(filterResult); //3,4,5,4,3
map():對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組
1 var mapResult = numbers.map(function(item,index,array){2 return(item*2);3 })4 alert(mapResult);//2,4,6,8,10,8,6,4,2
forEach():對數組中的每一項運行給定函數
1 numbers.forEach(function(item,index,array){2 //執行某些操作3 })
歸并方法
reduce()和reduceRight()這兩個方法都會迭代所有數組的項,然后構建一個最終返回的值。其中,reduce()方法從數組的第一項開始,逐個遍歷到最后,而reduceRight()正好相反,是從數組的最后一項開始,向前遍歷到第一項。這兩個方法都接受兩個參數:一個在每一項上調用的函數和(可選的)作為歸并基礎的初始值。調用的函數接受4個參數:前一個值、當前值、項的索引和數組對象。第一次迭代發生在數組的第二項上
使用reduce()方法可以執行求數組中所有值之和的操作
1 var results = [1,2,3,4,5]; 2 var sum = results.reduce(function(prev,cur,index,array){ 3 return prev+cur; 4 }) ; 5 alert(sum);//15 6 7 8 var sum = results.reduceRight(function(prev,cur,index,array){ 9 return prec+cur;10 }) 11 alert(sum);//15
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。