1. 程式人生 > >js中陣列的基本操作

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