天天看點

javascript引用類型 ——Array類型

ECMAscript數組的每一項都可以儲存任何類型的數組, 就是說,數組的第1個位置來儲存字元串,第2個位置 來儲存對象,第3個位置來儲存對象。

一、建立Array

建立數組有2種形式。第一種是構造函數:

var colosr = new Array();
        var colosr = new Array(20);
        var colosr = new Array("red","blue","black");
           

也可省去new操作符:

var colors = Array(3);
        var names = Array("Greg");
           

建立 數組的第2種方式是 使用數組字面量表示 法:

var colors = ['red','blue','black'];//建立一個包含3個字元串的數組
        var names = []; //建立一個空數組
        var values = [1,2, ]; //不要這樣!這樣會建立一個包含2或3項的數組
        var values = [ , , , , , ] //不要這樣!會建立一個包含5或6的空數組
           

 在讀取和設定數組的值時,要使用方括号并提供相應值的基于0的數字索引:

var colors = ["red", "blue", "black"]; //定義一個字元串數組
        alert(colors[0]); //顯示第一項 
        colors[2] = "green"; //修改第三項
        colors[3] = "purple"; //新增第四項
        console.log(colors); //colors =  ["red", "blue", "green", "purple"]
        colors.length; //4
           

數組的length屬性很有特點--它不是隻 讀的。

var colors = ["red", "blue", "black"]; //定義一個字元串數組
        colors.length = 2; //改變數組長度為2
        console.log(colors[2]); //undefined
        
        colors.length = 4 //改變數組長度為2
        console.log(colors[3]); //undefined
           

利用length 屬性也可以友善地在數組末尾添加新項:

var colors = ["red", "blue", "black"]; //定義一個字元串數組
        colors[colors.length] = 'green'; //在位置3添加一個顔色green
        colors[colors.length] = 'gray'; //再在位置4添加一個顔色gray
        console.log(colors); // ["red", "blue", "black", "green", "gray"]
           

由于數組的最後一項始終是length-1,是以下一個就是length,每當末尾添加一項後,其length屬性都會自動更新。二

var colors = ["red", "blue", "black"]; //定義一個字元串數組
        colors[99] = 'brown'; //brown
        console.log(colors.length); //100
           

二、檢測數組 

if(value instanceof Array){
            //對數組執行某些操作
        }
           

EMCAScript5新增了Array.isArray()方法。這 個方法的目的是最終确定某個值到底是不是數組:

if(Array .isArray(vallue)){
            //對數組執行某些操作
        }
           

 三、轉換方法

toLocaleString();

toString();傳回由數組中每個值的字元串形式拼接而成的一個以逗号為分隔的字元串

valueOf();傳回的還是數組

var colors = ['red', 'black', 'blue'];
console.log(colors.join(",")); //red,black,blue
console.log(colors.join('||')); //red||black||blue
           

四、棧方法

棧是一種LIFO 後進先出的資料結構。

棧中項的插入和 移除,隻以生在頂部。

push(),pop()

var colors = new Array();
        var count = colors.push('red', 'black');
        console.log(count); //2
        count = colors.push('blue');
        console.log(count) //3
        var item = colors.pop(); //取得最後一項
        console.log(item); //blue
        console.log(colors.length); //2
           

五、隊列方法

LIFO後進先出。隊列在清單的末端添加 項,從清單的前端移除項,

shift(),push()

var colors = new Array();
        var count = colors.push('red', 'black');
        console.log(count); //2

        count = colors.push('black');
        console.log(count); //3

        var item = colors.shift(); //取得第一項
        console.log(item); //red
        console.log(colors.length); //2
           

unshift()用途與shift相反。它能在數組前端添加任意個項并傳回新數組的長度。

var colors = new Array();
        var count = colors.unshift('red', 'green'); //推入兩項
        console.log(count); //2

        count = colors.unshift('black');
        console.log(count); //3

        var item = colors.pop(); //取得第一項
        console.log(item); //green
        console.log(colors.length); //2
           

六、重排序方法

reverse() 降序

sort() 升序

var values = [1, 2, 3, 4, 5];
        values.reverse();
        console.log(values); //[5, 4, 3, 2, 1]


        values.sort();
        console.log(values); //[1, 2, 3, 4, 5]
           

七、操作方法

concat():可以基于目前數組中的所有項建立一個新數組

slice():可以接受一或兩個參數,即要傳回項的起始和結束位置。

以下為位置方法:

indexOf():從數組的 開頭即位置0開始向後查找

lastIndexOf():則從 數組的末尾開始向前查找

以下為疊代方法:

every():對數組中的每一項運作給定的函數,如果該函數對每一項都傳回true,則傳回true;

fitler():對數組中的每一項運作給定函數,傳回該函數會傳回true的項組成的數組

forEach():對數組中的每一項運作給定函數,這個方法沒有傳回值

map():對數組中的每一項運作給定函數,傳回每次函數調用的結果組成的數組

some():對數組中的每一項運作給定函數,如果該 函數對任一項傳回true,則傳回true

以下為歸并方法:

reduce():從數組的第一項開始,逐個周遊到最後

reduceRight():從數組的最後一項開始,向前周遊到第一項

都接收4個參數:前一個值,目前值,項的索引和數組對象

concat()例子:

var colors = ['red', 'black']
        var colors2 = colors.concat(['green', 'purple', 'blue']);

        console.log(colors); //["red", "black"]
        console.log(colors2); //["red", "black", "green", "purple", "blue"]
           

slice()有3種方式:

(1)删除:可以删除任意數量的項。指定2個參數:要删除的第一項的位置和要删除的項數。例如:splice(0,2)會删除數組中的前兩項

(2)插入:可以向指定位置插入任意數量的項,隻需要指定3個參數:起始位置,0(要删除的項數)和要插入的項。例如:splice(2,0,"red","blue")

(3)替換:可以向指定位置插入任意數量的項,且同時删除任意數量的項,隻需要 指定3個參數:起始位置,要删除的項數和要插入的任意數量的項。例如:splice(2,1,"red","blue")會删除目前數組位置2的項,然後再從位置2開始插入字元串

slice()例子:

var colors = ['red', 'blue', 'green'];
        var removed = colors.splice(0, 1); //删除第一項
        console.log(colors); //["blue", "green"]
        console.log(removed); //["red"]

        removed = colors.splice(1, 0, 'yellow', 'black'); //從位置一開始插入兩項
        console.log(colors); //["blue", "yellow", "black", "green"]
        console.log(removed); // 空數組

        removed = colors.splice(1, 1, 'red', 'purple');
        console.log(colors); // ["blue", "red", "purple", "black", "green"]
        console.log(removed); //["yellow"]
           

indexOf(),lastIndexOf()例子:

var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];
        console.log(numbers.indexOf(4)); //3
        console.log(numbers.indexOf(8)); //7
        console.log(numbers.lastIndexOf(8)); //7 ?
        console.log(numbers.lastIndexOf(9)); //8 ?
           

歸并方法的例子:

var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
        var everyResult = numbers.every(function(item, index, array) {
            return (item > 2);
        })
        console.log(everyResult); //false

        var someResult = numbers.some(function(item, index, array) {
            return (item > 2);
        })
        console.log(someResult); //true
           
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
        var filterResult = numbers.filter(function(item, index, array) {
            return (item > 2);
        })
        console.log(filterResult); //[3, 4, 5, 4, 3]
           
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
        var mapResult = numbers.map(function(item, index, array) {
            return item * 2;
        })
        console.log(mapResult); //[2, 4, 6, 8, 10, 8, 6, 4, 2]
           

歸并方法:

使用reduce()方法可以執行求數組中所有值之和的 操作

var numbers = [1, 2, 3, 4, 5];
        var sum = numbers.reduce(function(prev, cur, index, array) {
            return prev + cur;
        })
        console.log(sum); //15
           
var numbers = [1, 2, 3, 4, 5];
        var sum = numbers.reduceRight(function(prev, cur, index, array) {
            return prev + cur;
        })
        console.log(sum); //15