js中陣列的基本操作
1.陣列的基本操作
前言:ECMAScript陣列是很常用的一種資料型別,在其他的語言中,陣列也是很常用很重要的一種資料型別.但ECMAScript陣列有些地方還是有自己的特點的,如下:
1)陣列的每一項可以儲存任何資料型別的資料,也就是陣列中的資料可以有多種資料型別.
2)陣列的大小是可以動態調整的,可以隨著資料的新增自動增長以容納新增資料.
下面進入正題,來說說陣列的基本操作
首先要運算元組,那麼就要先建立陣列
陣列的建立
使用建構函式Array建立陣列
var arr1=new Array(); //無參建立
var arr2=new Array(20);//指定陣列大小
var arr3=new Array("red","green","blue");//指定陣列中的數值
使用陣列字面量表示法建立陣列
var arr4=[];
var arr5=["red","green","blue"];
//和物件一樣,在使用陣列字面量表示法時,也不會呼叫Array建構函式(Firefox3以及更早版本除外)
注:陣列的屬性length很特殊,可讀可寫,arr[arr.length]=”newvalue”;可用來在陣列末尾新增新項
陣列的檢測方法
第一種,instanceof操作符,與全域性環境有關
if(arr1 instanceof Array)
{
alert("是陣列!" );
}
第二種,Array.isArray()方法,支援的瀏覽器有IE9+,Firefox 4+,Safrai 5+,Opera 10.5+和Chorme,與全域性環境無關.
if(Array.isArray(arr1))
{
alert("是陣列!");
}
對於尚未實現這個方法的瀏覽器中檢測陣列如下方法:
function isArray(value) {
return Object.prototype.toString.call(value)=="[object Array]";
}
陣列的轉換方法
- toLocaleString()方法
- toString()方法 ,返回的是以逗號分割的字串
- valueOf()方法 ,返回的是陣列
- jon(“separator”),用separator構造包含所有陣列的字串
陣列的棧方法
棧(後進先出)是一種可以限制插入和刪除項的資料結構,其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
- push()方法,可接收任意數量的引數,把它們逐個新增到陣列末尾,並返回修改後的陣列長度.
- pop()方法,從陣列的末尾移除最後一項,減少陣列length的值,然後返回移除的項.
arr3=arr3.push("yellow","yellow");//進棧
var item=arr3.pop();//出棧
陣列的佇列方法
佇列(先進先出)是一種特殊的線性表,特殊之處在於它只允許在表的前端進行刪除操作,而在表的後端進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。
- shift()方法,移除陣列中的第一項並返回該項,同時陣列的長度減一(和push()配合使用可實現佇列)
- unshift()方法,在陣列前端新增任意個項,並返回新陣列的長度(和pop()配合使用可實現反佇列)
陣列的排序和重排序
- 重排序 reverse()方法,會改變原陣列
排序 sort()方法
預設情況下,sort()方法按升序排列陣列項,sort()方法會呼叫每個陣列項的toString()轉型方法,然後比較得到的字串,以確定排列順序.所以即使陣列中的每一項是數值,sort()方法比較的也是字串,所以數字排序需要稍微做一點改動.
數字正序排序
function sort(a,b) {
return a-b;//正序排序
}
數字反排序
function sort(a,b) {
return b-a;//反排序
}
注意:reverse()和sort()方法的返回值是經過排序之後的陣列
陣列的常用操作方法
concat()方法,該方法會建立當前陣列的副本,然後將接收到的引數新增到副本的末尾,最後返回新建立的陣列.
1)無參呼叫的情況下,只複製當前陣列並返回副本
2)如果傳遞的是一個或多個數組,該方法會將這些陣列中的每一項新增到結果陣列中.
3)如果傳遞的不是陣列,這些值就被簡單的新增到結果陣列的末尾.slice()方法,該方法能夠基於當前陣列的一個或多個項建立一個新陣列,可接收一個或兩個引數不會影響原陣列.
1)在只有一個引數的情況下,slice()方法返回從該引數指定位置開始到當前陣列末尾的所有項.
2)在有兩個引數的情況下,slice()方法返回從起始位置到結束位置之間的項,但不包括結束位置的項.
注意:如果slice()方法的引數中有一個負數,則用陣列長度加上該數來確定相應的位置,如果結束位置小於起始位置,則返回空陣列.
splice()方法,該方法的主要用途是向陣列的中部插入項
1)刪除
可以刪除任意數量的項,只需要指定兩個引數:要刪除的第一項的位置和要刪除的項數.
例如:splice(0,3)會刪除陣列中的前兩項.
2)插入
可以向指定位置插入任意數量的值,只需要指定三個引數:起始位置,要刪除的項數和要插入的項數.
例如:
splice(0,2,”red”,”green”);
從陣列的位置2開始插入字串”red”和”green”3)替換
可以向指定位置插入任意數量的項,且同時刪除任意數量的項,插入的項數不必與刪除的項數相等,只需指定三個引數:起始位置,要刪除的項數和要插入的任意數量的項.
例如:
splice(2,1,”red”,”green”);
刪除當前陣列位置2的項,然後從位置2開始插入字串”red”和”green”
注:
splice()方法始終都會返回一個數組,該陣列中包含從原始陣列中刪除的項(如果沒有刪除任何項,則返回一個空陣列)
位置方法
都接收兩個引數:要查詢的項和表示查詢起點位置的索引
- indexOf() 從陣列的開頭向後查詢
- lastIndexOf() 從陣列的末尾向前查詢
迭代方法
- every():對陣列中的每一項執行給定函式,如果該函式對每一項都返回true,則返回true.
- filter():對陣列中的每一項執行給定函式,返回該函式會返回true的項組成的陣列.
- forEach():對陣列中的每一項執行給定函式,這個方法沒有返回值.
- map():對陣列中的每一項執行給定函式,返回每次函式呼叫的結果組成的陣列.
- some():對陣列中的每一項執行給定函式,如果該函式對任一項都返回true,則返回true.
歸併方法
接收兩個引數:一個在每一項上呼叫的函式和(可選的)作為歸併基礎的初始值
- reduce() 第一項開始,遍歷到最後一項
reduceRight() 最後一項開始,遍歷到第一下項
注:支援的瀏覽器有IE9+,Firefox3+,Safaris,OPera 10.5和Chrome