昨天記錄了棧方法和隊列方法。今天把餘下的幾種方法也記錄下來。 (一)重排序方法 reverse()方法可以反轉數組的順序。例如: var num=[1,4,5,2,7]; num.reverse(); alert(num);//輸出7,2,5,4,1 sort()方法則是按升序排列數組,即從小到大排 ...
昨天記錄了棧方法和隊列方法。今天把餘下的幾種方法也記錄下來。
(一)重排序方法
reverse()方法可以反轉數組的順序。例如:
var num=[1,4,5,2,7];
num.reverse();
alert(num);//輸出7,2,5,4,1
sort()方法則是按升序排列數組,即從小到大排列。sort()方法會調用每個數組項的toString(),然後比較得到的字元串(要記住sort()方法比較的是字元串)。
因為比較的是字元串所以會有一點問題發生。例如:
var num=[0,5,1,15,10];
num.sort();
alert(num); //輸出0 1 10 15 5
出現這問題的原因是sort()比較的是字元串,因此我們可以讓sort()接收一個比較函數作為參數。例如:
function compare(value1,value2){
if(value1<value2){
return -1;
}else if(value1>value2){
return 1;
}else{
return 0;
}
}
var num=[0,5,1,15,10];
num.sort(compare);
alert(num);// 0,1,5,10,15
要想降序的話調換一下上邊compare的返回值。
(二)操作方法
concat()方法可以基於當前數組中的所有項創建一個新的數組。具體來說,先創建當前數組的副本,再把接收到的參數放在新數組的末尾並且返回新數組。例如:
var color=["red","black","blue"];
var color2=color.concat("white",["yellow","green"]);
alert(color2);//red black blue white yellow green
slice()方法可基於當前數組中的一或多個項創建數組,可接收一或兩個參數,即要返回項的起始和結束位置。(這裡要記住的是返回項中不包括結束位置的項)
var color=["red","black","blue","white"];
var color2=color.slice(2);
alert(color2); //輸出 red black
var color3=color.slice(1,3);
alert(color3); 輸出 black blue
如果slice()方法參數是負數的話,就用數組的長度加上該參數。
splice()方法可用於向數組的中部插入項。使用這種方法的方式有三種,刪除,插入和替換。最後返回被移除的項
當指定兩個參數時:要刪除第一項的位置和刪除的項數。
當指定三個參數時:起始位置 要刪除的項數 要插入的項
var color=["red","black","blue","white"];
var remove=color.splice(0,1);
alert(color); //輸出black blue white
alert(remove);//輸出red
remove=color.splice(1,0,"green","yellow");
alert(color);//black green yellow blue white
alert(remove);//返回一個空數組
remove=color.splice(1,1,"red","purple");
alert(color);//輸出black red purple yellow blue white
alert(remove);//輸出green
(三)位置方法
indexOf()和lastIndexOf()方法,接受兩個參數:查找的項 開始位置 indexOf()從數組開頭開始找,lastIdexOf()從數組末尾開始找。
(四)迭代方法
JS為數組定義了5個迭代方法 every() filter() forEach() map() some(). 每個方法都接收兩個參數:要在每一項運行的函數和(可選的)運行該函數的作用域對象。
首先傳入這些方法的函數會接收三個參數:數組項的值 該項在數組中的位置 數組對象本身
every()和some()方法最為相似,every()方法是如果該函數對每一項都返回true,則返回true(請記住,是每一項!!) 而 some()方法是任意一項返回true,則返回true
例如:
var num=[1,2,3,4,5,4,3,2,1];
var everyRuselt=num.every(function(item,index,array){
return item>2;
});
alert(everyRuselt); //輸出false
var someRuselt=num.some(function(item,index,array){
return item>2;
});
alert(someRuselt);//輸出true
filter()方法會返回函數中true的項組成的數組,例如
var num=[1,2,3,4,5,4,3,2,1];
var filterRuselt=num.filter(function(item,index,array){
return item>2
});
alert(filterRuselt);//輸出[3,4,5,4,3]
map()方法會返回每次函數調用的結果組成的數組
var num=[1,2,3,4,5,4,3,2,1];
var mapRuselt=num.map(function(item,index,array){
return item*2;
});
alert(mapRuselt);//輸出 [2,4,6,8,10,8,6,4,2]
最後一種方法是forEach()這個方法沒有返回值,它只是對數組中的每一項運行傳入函數。與for迴圈迭代數組本質一樣
var num=[1,2,3,4,5,4,3,2,1];
num.forEach(function(item,index,array){
//執行一些操作
});
(五)歸併方法
reduce()和reduceRight(),這兩個方法都會迭代數組的所有項,前者從數組第一項開始遍歷,後者從數組最後一項開始遍歷。
這兩個方法都接收兩個參數:在每一項上調用的函數和(可選的)作為歸併基礎的初始值
傳給這兩個方法的函數有四個參數:前一個值 當前值 項的索引 數組對象
例如:
var num=[1,2,3,4,5];
var sum=num.reduce(function(prev,cur,index,array){
return prev+cur;
});
alert(sum); //輸出15