1. 程式人生 > 前端設計 >陣列方法

陣列方法

一、建立陣列

  • 陣列的每一項可以儲存任何型別的資料,陣列的大小可以動態調整,隨著資料的新增自動增長以容納新增資料。
  • 使用Array建構函式建立陣列
var arr = new Array();
<!--給建構函式傳遞數值,該陣列會自動變成陣列length屬性的值-->
<!--建立length值為20的陣列-->
var arr = new Array(20) 
複製程式碼
  • 使用字面量建立陣列。 與物件一樣,在使用字面量表示法時,不會呼叫Array建構函式
<!--陣列字面量由一對包含陣列項的方括號表示,多個項之間以逗號隔開-->
var arr =[1,2,3];
var names = []; //建立一個空陣列
複製程式碼

二、陣列值的讀取與設定

var num = [1,3,4];
alert(num[0]) //顯示第一項--> 1
num[2] = 'red'; //修改第三項 
num[4] = 5;  //新增第四項
複製程式碼

方括號中索引表示需要訪問的值

  • 設定索引小於陣列中項數,則返回對應項值。
  • 修改值則會替換指定位置的值。
  • 設定索引大於陣列中項數,陣列自動增加到索引值的長度,新增新項。 可以通過陣列的length屬性向陣列末尾移除項或者新增新項
<!--移除-->
var colors=['red','yellow','blue'];
colors.length = 2;
alert(colors[2]) //undefined
alert(colors) // ['red'
,'yellow'] <!--新增--> var num = [1,4]; num.length = 5; alert(num[4]) //undefined 複製程式碼

三、轉換方法

toString()

  • 呼叫陣列的toString()方法會返回陣列中每個值以逗號分隔的字串
var num = [1,4];
alert(num.toString()) //'1,4'
複製程式碼

join()

  • join()方法可以使用不同的分隔符來構建字串。
  • join()方法只接收一個引數,用作分隔符的字串。不傳值預設使用逗號分隔
var colors=['red','blue','green'];
alert(colors.join()) //'red,blue,green'
alert(colors.join('||')) //'red||blue||green' 複製程式碼
如果陣列中某項時null或undefined,那麼該值在join()、toString()、toLocaleString()、valueOf()方法中返回的結果中以空字串表示。

四、陣列方法

  • push()方法可以接收任意數量的引數,把它們逐個新增到陣列末尾,並返回修改後的陣列長度。
var num =[];
var num1 = num.push(1,2)
alert(num) // [1,2]
alert(num1) //2
複製程式碼
  • pop()方法從陣列末尾移除最後一項,減少陣列的length值,返回移除的項。
var num = [1,4];
var num1 = num.pop()
alert(num)  // [1,3]
alert(num1) // 4
複製程式碼
  • shift()方法移除陣列的第一項並返回改項,同時陣列長度減一。
var num=[1,4];
var num1 = num.shift()
alert(num) //[2,4]
alert(num1) // 1
複製程式碼
  • unshift()方法可以在陣列前端新增任意個項並返回新的陣列長度。
var num = [1,4];
var num1 = num.unshift(5,6);
alert(num) // [1,4,5,6]
alert(num1) //6
複製程式碼
  • reverse()方法會翻轉陣列項的順序,返回排序後的陣列。
var num = [1,4];
num.reverse() // [4,1]
複製程式碼
  • sort() 方法預設排序順序是根據字串UniCode碼。因為排序是按照字串UniCode碼的順序進行排序的,所以首先應該把陣列元素都轉化成字串(如有必要),以便進行比較。
語法:arrayObject.sort(sortby);
引數sortby 可選,用來規定排序的順序,但必須是函式。
<!--按字母排序-->
var arr = ['tom','ani','love','dav'];
arr.sort() // ['ani','dav','tom']
<!-- 數值排序-->
var num = [0,1,10,15];
num.sort() // [0,15,5]
<!--升序排列-->
var num = [0,15];
var snum = num.sort(function(a,b){
    return a-b;
})
alert(snum) // [0,15]
<!--降序排列-->
var num = [0,b){
    return b-a;
})
alert(snum) // [15,0]

複製程式碼
  • concat()方法先拷貝一個當前陣列,將接收到的引數新增到拷貝的陣列末尾,返回新構建的陣列
var num = [1,3];
var num2 = num.concat('red',[4,5])
alert(num) // [1,3]
alert(num2) // [1,'red',5]
複製程式碼
  • slice()方法基於當前陣列中的一個或多個項建立一個新陣列.該方法接收兩個引數,即返回項的起始和結束位置.
只有一個引數的情況下,slice()方法返回從開始位置到陣列末尾的所有項.
如果有兩個引數,slice()方法返回起始和結束位置之間的項,不包括結束位置的項.
slice()方法不會影響原陣列
如果slice()方法中有負數,則用陣列長度加上該負數來確定相應位置
如果結束的位置小於起始位置,則返回空陣列
var num=[1,5];
var num1 = num.slice(1) //[2,5]
var num2 = num.slice(1,4) // [2,4]
var num3 = num.slice(-4,-1) // [2,4]
var num4 = num.slice(2,1) // []
複製程式碼
  • splice()方法 始終返回刪除的項,沒有刪除項則返回空陣列
  1. 刪除: 可以刪除任意數量的項,指定2個引數:要刪除的第一項位置和要刪除項的個數
var num = [1,4];
var remove = splice(1,2) //[2,3]
alert(num) // [1,4]
複製程式碼
  1. 插入: 可以向指定位置插入任意數量的項,指定三個引數:起始位置,0(要刪除的項數),要插入的項
var num = [1,4];
var num2 = num.splice(1,6) // []
alert(num) // [1,6,4]
複製程式碼
  1. 替換 : 可以向指定位置替換任意項,要刪除的項數,要插入的項.插入的項可以不與刪除的項相同.
var num = [1,7) // [2,3]
alert(num) //[1,7,4]
複製程式碼
  • indexOf()和lastIndexOf() 這兩個方法都接收兩個引數:要查詢的項和(可選)查詢起點的索引,indexOf()從開頭往後找第一次出現的位置,lastIndexOf()從後往前找.沒有找到返回-1,找到返回當前項在陣列中的索引
var num = [1,1];
num.indexOf(4); // 3
num.lastIndexOf(4) // 5
num.indexOf(4,4) // 5
num.lastIndexOf(4,4) // 3
num.indexOf(0) // -1
複製程式碼

ES5方法

  • every() 和 some() 用於查詢陣列中的項是否滿足某個條件
  1. every() 傳入的函式必須對每一項返回true,every()才返回true,否則返回false
  2. some() 傳入的函式只要其中某一項返回true,some()就返回true.
var num =[1,1];
var num1 = num.every(function(item,index,array){
    return item > 2;
})
alert(num1) // false
var num2 = num.some(function(item,array){
    return item > 2;
})
alert(num2) // true
複製程式碼
  • filter() 篩選出符合條件的項構建成新陣列.
var num = [1,1];
var num2= num.filter(function(item,array){
    return item > 2
})
alert(num2) // [3,3]
複製程式碼
  • map() 返回一個新陣列,陣列中的元素為原始陣列元素呼叫函式處理後的值。
var num = [1,1];
var num2 = num.map(function(item,array){
    return item * 2
})
alert(num2) // [2,8,2]
複製程式碼
  • forEach() 與for迴圈一樣遍歷陣列
  • reduce()和reduceRight() 都會迭代陣列所有項,最後返回一個最終值.reduce()從第一項開始遍歷,reduceRight() 從最後一項開始遍歷.接收4個引數:前一個值,當前值,項的索引,陣列物件. 第一次迭代發生在陣列的第二項上,所以第一個引數是陣列第一項,第二個引數是陣列第二項.
 var num = [1,5];
 var sum = num.reduce(function(prev,cur,array){
     return prev + cur;
 });
 alert(sum) // 15
複製程式碼