JS Array類型


數組是數據的有序列表。

JS中的數組每一項都能保存任何類型的數據。

JS數組的大小是可以動態調整的,即可以隨着數據的添加自動增長以容納新增的數據。

 

創建數組的方式

第一種方式,使用Array構造函數。

var colors = new Array();    //創建一個空數組

var colors = new Array(3);    //指定數組包含3項

var colors = new Array("red","green","blue");    //創建一個包含3項的數組

第二種方式,使用數組字面量表示法。

var colors = [];    //創建一個空數組

var colors = ["red","green","blue"];    //創建一個包含3項的數組

多個數組項之間用逗號隔開,最后一項后面不要添加逗號。

通過數組字面量表示法定義數組時,不會調用Array構造函數。

 

length屬性

數組的length屬性不是只讀的,通過設定length屬性的值,可以移除某些項或者添加新項(新項的值為undefined)。

colors[colors.length] = "black";    //在數組末尾添加新項

colors[9] = "white";    

colors.length    //10    5-8項都是undefined

 

檢測某個對象是不是數組  

一個全局執行環境    alert(array instanceof Array);    //true

多個全局執行環境    alert(Array.isArray(array));    //true

 

轉換方法

數組的toString()方法,返回的是一個字符串;數組中的每一項的字符串表示拼接起來,中間以逗號分割;

數組的valueOf()方法,返回的是一個數組;

alert()接收字符串參數,實際上會在后台調用數組的每一項的toString()方法,所以返回的值與調用toString()方法返回的值一樣。

一般而言,toLocaleString()方法返回的值與toString()方法與valueOf()方法返回的值相同,但不總是這樣,當顯式地定義toLocaleString()方法和toString()方法,並設置不同的返回值時,這兩個方法返回的值當然是不一樣的。

例子:

var x = {

    toString: function() {

        return "black";

    },

    toLocaleString: function() {

        return "black";

    }

};

var y = {

    toString: function() {

        return "white";

    },

    toLocaleString: function() {

        return "#fff";

    }

};

var z = [x,y];

alert(z.toString());    //black,white

alert(z.toLocaleString());    //black,#fff

默認情況下,toLocaleString()方法、toString()方法、valueOf()方法返回的字符串以逗號分隔;可以用join()方法自定義分隔符;

join()方法接收一個參數,即用作分隔符的字符串,並返回一個包含所有數組項的字符串

如果數組中某一項的值是null或者undefined,那么該值在toLocaleString()方法、toString()方法、valueOf()方法、join()方法返回的結果中以空字符串表示。

 

棧方法

棧是一種LIFO(Last-In-First-out,后進先出)的數據結構,也就是最新添加的項最早被移除。

棧中項的添加(推入)和移除(彈出),只發生在棧的頂部。

JS為數組提供了push()和pop()方法,實現類似棧的行為。

push()方法可以接收任意數量的參數,並把它們逐個添加到數組末尾,並返回修改后的數組的長度。

pop()方法從數組末尾移除最后一項,減少數組的length值,並返回移除的項。

 

隊列方法

隊列數據結構的規則是FIFO(First-In-First-Out,先進先出),隊列在數組的末端添加項,在數組的前端移除項。

shift()方法,移除數組的第一項,減少數組的length值,並返回移除的項。

unshift()方法,在數組前端添加任意個項,並返回修改后的數組的長度。

 

重排序方法

reverse()方法,反轉數組項的順序。

sort()方法

在默認情況下,sort()方法按照升序排列數組項;sort()方法會調用數組的toString()方法,然后比較得到的字符串。

sort()方法可以接收一個比較函數作為參數。

比較函數接收兩個參數:如果第一個參數應該位於第二個參數之前則返回一個負數;如果第一個參數應該位於第二個參數之后則返回一個正數;如果兩個參數相等則返回0。

例子:比較函數,升序排列:

var compare = function(value1,value2) {

    if (value1<value2) {

        return -1;

    } else if (value1>value2) {

        return 1;

    } else {

        return 0;

    }

};

var y = [1,3,2,4,5];
alert(y.sort(compare));    //1,2,3,4,5

alert(y.sort(compare).reverse());    //5,4,3,2,1

 

對於數值類型或者其valueOf()方法會返回數值類型的對象類型,可以使用一個更簡單的比較函數。

升序:

function compare(value1,value2) {

    return value1-value2;

};

 

操作方法

concat()方法,創建當前數組中所有項的一個副本,然后將接收到的參數添加到這個副本的末尾,最后返回新建的數組。    //不影響原始數組,最后返回的是一個新數組。

slice()方法,基於當前數組中的一個或多個項創建一個新的數組;接收兩個參數,起始位置(包含在內)和結束位置(不包含在內)。    //不影響原始數組。

如果slice()方法的參數中有負數,則用數組的長度加上負數以確定相應的起始和結束位置;如果結束位置小於起始位置,則返回一個空數組。

splice()方法    //改變原始數組

刪除:可以刪除任意數量的項;接收兩個參數,起始位置、刪除的項數;  //返回刪除的項。

插入:可以插入任何數量的項;接收三個參數,起始位置、0(刪除的項數)、插入的項;    //返回空數組。

替換:可以替換任意數量的項;接收三個參數,起始位置、刪除的項數、插入的項;刪除的項與插入的項不必相等。    //返回刪除的項。

 

位置方法

indexOf()方法,從數組的開始位置向后查找;

lastIndexOf()方法,從數組的末尾向前查找;

接收兩個參數,查找的項、(可選)查找起點位置的索引;返回查找的項在數組中的位置。

例子:

var x = [1,2,3,4,5,4,3,2,1];

alert(x.indexOf(4));    //從前往后找,第一個“4”,下標為3,返回 3 ;

alert(x.lastIndexOf(4));    //從后往前找,第一個“4”,下標為5,返回 5 ;

alert(x.indexOf(4,4));    //從下標為"4"的項開始往后找,返回5;

alert(x.lastIndexOf(4,4));    //從下標為"4"的項開始往前找,返回3;

 

迭代方法

every()方法,對數組中的每一項都運行給定函數,如果該數組中的每一項都返回true,則返回true;

some()方法,對數組中的每一項都運行給定函數,如果該數組中有任何一項返回true,則返回true;

filter()方法,對數組中的每一項都運行給定函數,返回該數組中返回true的項;

map()方法,對數組中的每一項都運行給定函數,返回每一項運行函數后的結果;

forEach()方法,對數組中的每一項都運行給定函數,沒有返回值。

這些方法接收兩個參數:給定的函數、(可選)運行該函數的作用域對象——影響this的值。

其中函數接收三個參數:數組項的值,數組項的索引,數組對象本身。

例子:

var x = [1,2,3,4,5,4,3,2,1];

var y = x.filter(function(item,index,array){

    return (item>3);

});

alert(y);    //4,5,4

 

歸並方法

reduce()方法;             

reduceRight()方法;

迭代數組中的所有項,然后構建一個最終返回的值。

這兩個方法都接收兩個參數:在每一項上都調用的函數、(可選)作為歸並基礎的初始值。

其中函數接收四個參數:前一個值、當前的值、項的索引、數組對象本身。

這個函數返回的任何值都會作為第一個參數傳給下一項。

例子:

var x = [1,2,3,4,5];

var y = x.reduce(function(pre,cur,index,array){

    return (pre*cur);

});

alert(y);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM