Array類型也是ECMASCRIPT中最常見的數據類型,而且數據的每一項可以保存任何類型的數值,而且數組的大小是可以動態調整的,可以隨著數據的添加自動增長以容納新的數據。下麵,總結數據的一些常用方法: 1.創建數組 1.1.使用Array構造函數 1.2.數組字面量創建 2.讀取和設置數組的值 i ...
Array類型也是ECMASCRIPT中最常見的數據類型,而且數據的每一項可以保存任何類型的數值,而且數組的大小是可以動態調整的,可以隨著數據的添加自動增長以容納新的數據。下麵,總結數據的一些常用方法:
1.創建數組
1.1.使用Array構造函數
var arr=new Array(4); //創建一個包含3項的空數組 var arr2=new Array('red','blue','yellow'); //['red','blue','yellow']
1.2.數組字面量創建
var arr3=[]; //[] var arr4=['red','yellow']; //['red','yellow'] var arr5=[1,2,]; //[1,2,]
2.讀取和設置數組的值
index數組的索引,即下標,當index<arr.length時,可以獲取數組中的值,否則取到的值為undefined。
通過設置數組的length,可以對數組的末尾移除或添加
var arr4=['red','yellow']; console.log( arr4[0], arr4[2], ); //red //undefined var arr4=['red','yellow']; arr4.length=1; console.log(arr4); arr4.length=3; console.log(arr4); //["red"] 長度變為1 //["red", empty × 2] 長度變為3,後兩項為空
var arr=[1,2,3];
arr[10]=10;
console.log(arr);
//[1, 2, 3, empty × 7, 10] length為10中間的值為undefined
小結:通過arr[arr.length-1]可以獲取到數組的最後一項,通過arr[length]=item可以設置最後一項的值並動態增加了數組的長度
3.數組的方法
3.1.連接兩個數組或多個數組-concat
不改變原始數組,需要用新的變數保存返回的新數組
var arr1=[1,2]; var arr2=[2,3]; arr1.concat(arr2); console.log(arr1,arr2); var arr3=arr1.concat(arr2); console.log(arr3); // [1, 2] (2) [2, 3] // [1, 2, 2, 3]
3.2.截取數組一部分-slice
arr.slice(startIndex,endIndex);截取的項包括數組開始的索引的項,不包括數組結束的索引的項
也不改變原始數組,需要用新的變數保存返回的新數組
var arr=[1,2,3]; arr.slice(0,1); console.log(arr); var sub=arr.slice(0,1); console.log(sub); // [1, 2, 3] // [1]
3.3用不同的分隔符構建字元串-join
預設以','拼接,
var arr=[1,2,3]; var str1=arr.join(); var str2=arr.join("-"); console.log(str1,str2); //1,2,3 //1-2-3 // 根據數組拼接成html字元串 var arr=["HTML","CSS","JS"]; var html='<li>'+arr.join('</li><li>')+'</li>'; console.log(html); // HTML</li><li>CSS</li><li>JS</li>
3.4.數組的反轉-reverse
var arr=[1,2,3,4,5]; arr.reverse(); // [5, 4, 3, 2, 1]
3.5.數組的排序-sort方法
這裡只是通過出入比較函數給sort方法來保持正確的排序,對象也可以根據某一屬性來進行正確的排序,這裡暫不贅述。
var arr=[1,2,11,5,50]; arr.sort(); // [1, 11, 2, 5, 50] 按照uicode編碼排序不是我們想要的結果 通過傳入比較函數保證正確的排序 arr.sort(function(a,b){ if(a<b){ return -1; }else if(a>b){ return 1; }else{ return 0; } }) // [1, 2, 5, 11, 50]
3.6.數組的刪除,替換,插入-splice方法
array.splice(index,howmany,item1,.....,itemX);
// 刪除開始索引後的第幾個元素 var arr=[1,2,3,4,5]; arr.splice(1,1); //[1, 3, 4, 5] // 刪除開始索引後的第幾個元素然後插入新的值 var arr1=[1,2,3,4,5]; arr1.splice(1,2,11,22); // [1, 11, 22, 4, 5]
3.7.棧方法
數組提供了一種讓數組類似於其他數據結構的方法,棧是一種LIFO(Last-In-First-Out)後進先出的數據結構,也就是最新添加的最早被移除。
棧中的推入-push,接收任意變數的參數,把他們添加到數組的末尾,並返回修改後數組的長度
棧中的彈出-pop,從數組末尾移除最後一項,減少length值,然後返回移除的項
都發生在同一位置-棧的頂部。
var arr=[1,2,3]; arr.push('a'); //4 返回數組的長度 arr // [1, 2, 3, "a"] var arr=[1,2,3]; arr.pop(); //3 返回數組最後一項的彈出值 arr (3) [1, 2]
3.8.隊列方法
隊列的數據結構是FIFO(First-In-First-Out),隊列在數組的末端添加項,在列表的前端移除項。
末端添加項-push,
前端移除項-shift,移除數組中的第一項,並返回該項,同時將數組長度減1,
前端新增項-unshift,在數組前端新增一項並返回數組的新長度。
通過數組的unshift和pop方法可以從相反方向的來模擬隊列
var arr=[1,2,3]; arr.push(4) //4 arr.shift(); //1 arr; //[2,3,4] arr.unshift("a"); //4 arr; //["a",1,2,3]
3.9.數組的位置方法-indexOf,lastIndexOf
indexOf() 方法可返回數組中某個指定的元素位置。
該方法將從頭到尾地檢索數組,看它是否含有對應的元素。開始檢索的位置在數組 start 處或數組的開頭(沒有指定 start 參數時)。如果找到一個 item,則返回 item 的第一次出現的位置。開始位置的索引為 0。如果在數組中沒找到指定元素則返回 -1。
lastIndexOf() 方法可返回數組中從尾到頭方向上的位置,找到返回第一次出現的位置,否則返回-1。
var arr=[1,2,3,1,4]; arr.indexOf(1); //0 arr.lastIndexOf(1); //3
3.10.數組的平鋪(有些低版本瀏覽器不相容)
方法會遞歸到指定深度將所有子數組連接,並返回一個新數組。arr.flat(depth);預設深度為1
var arr=[1,2,3,[4,5],[7,8]]; var arr2=arr.flat(); //等價於arr.flat(1) console.log(arr2); // [1, 2, 3, 4, 5, 7, 8]
4.數組的迭代方法
4.1.every():對數組的每一項運行給定函數,如果該函數對每一項都返回true,則返回true
var numbers=[1,2,3,4,5]; var result=numbers.every(function(item,index,arr){ return item>2; }) result //false
4.2.some():對數組的每一項運行給定函數,如果該函數對任一項返回true,則返回true
var numbers=[1,2,3,4,5]; var result=numbers.some(function(item,index,arr){ return item>2; }) result //false
4.3.filter():對數組中每一項運行給定的函數,返回該函數會返回true的項組成新的數組
var numbers=[1,2,3,4,5]; var result=numbers.filter(function(item,index,arr){ return item>2; }); result //[3, 4, 5]
4.4.map():對數組中每一項運行給定的函數,返回每次函數調用的結果組成新的數組
var numbers=[1,2,3,4,5]; var result=numbers.map(function(item,index,arr){ return item*item; }); result // [1, 4, 9, 16, 25]
4.5.foreach():對數組中每一項運行給定函數,這個方法沒有結果,與for迴圈迭代數組一樣
眼過千遍,不如手寫一遍,以上是對JavaScript數組常用API的一些總結,也是平常業務開發中會經常使用到的,如有不足,歡迎指正。
參考資料:
《JavaScript高級程式設計》