javascript中的數組

數組是值的有序集合。每一個值叫作一個元素,而每一個元素在數組中有一個位置,以數字表示,稱爲索引。javascript的數組是無類型的:數組元素能夠是任意類型,而且同一個數組中的不一樣元素也可能有不一樣的類型。

一 建立數組

使用數組直接量是建立數組最簡單的方法,在方括號中將數組元素用逗號隔開便可。例如:javascript

var empty = [];              // 沒有元素的數組
    var arr = [1, 2, 3];         // 有5個數值得數組
    var mix = [1, true, "a"];    // 3個不一樣類型元素

若是省略數組直接量中的某個值,省略的元素將被賦予undefined值。例如:java

var count = [1, , 3];        // 數組有3個元素,第二個元素爲undefined

調用構造函數Array()是建立數組的另外一種方法。能夠用三種方式:數組

調用時候沒有參數app

var a = new Array();

調用時有一個數值參數,它指定長度:函數

var a = new Array(10);

顯式指定兩個或多個數組元素或者數組的一個非數值元素:code

var a = new Array(5, 4, 3, " test, test");
二 數組長度

每一個數組都有一個length屬性,就是這個屬性區別於常規的js對象。針對稠密數字,length屬性值表明數組中元素的個數,其值比數組中最大的因此大1:對象

[].length                  // => 0: 數組沒有元素
    ['a', 'b', 'c'].length     // => 3: 最大的索引爲2,length爲3

爲了維持這一原則,數組有兩個特殊行爲:排序

  1. 若是爲一個數組元素賦值,它的索引i大於或等於數組長度時,length屬性的值將 設置爲i+1索引

  2. 設置length屬性爲一個小於當前長度非負整數n時,當前數組中那些大於或等於n的元素從中刪除。ip

    var a = [1, 2, 3, 4];
    a.length = 3;    // 如今a爲 [1, 2, 3]
三 數組元素的添加和刪除

push()方法在數組末尾增長一個或多個元素:

var arr = [];              // 建立一個空數組
    arr.push("a");             // 在末尾添加一個元素。arr = ["a"];

unshift()方法在數組首部插入一個元素,而且將其餘元素依次移到更高的索引處:

var arr = [1, 2 ,3];
    arr.unshift(0);          // 此時arr = [0, 1, 2, 3]

pop()方法從末尾刪除一個元素,並返回被刪除的元素值。
shift()方法從數組頭部刪除一個元素。

四 數組遍歷

通常使用for循環來遍歷數組元素。例如

var arr = [1, 2, 3];
    for(var i=0, len= arr.length; i<len; ++) {
        // 循環體
    }

五 數組方法

  1. join()

    Array.join()方法將數組中全部元素都轉化爲字符串並鏈接在一塊兒,返回最後生成的字符串。若是不指定分隔符,默認使用逗號。
    var a = [1, 2, 3];
    a.join();         // => "1,2,3"
    a.join(" ");      // => "1 2 3"
    a.join("");       // => "123"
    Array.join()與String.split()方法的逆向操做,後者是將字符串分割成數組。
  2. reverse()

    Array.reverse()方法將數組中的元素顛倒順序,返回逆向數組。例如:
    var a = [1, 2, 3];
    a.reverse();     // => [3, 2, 1]
  3. sort()

    Array.sort()將數組中的元素排序並返回排序後的數組。當不帶參數調用sort()時,數組元素以字母表順序排序。
    var arr = ["banana", "cherry", "apple"];
    a.sort();                    // a = ["apple", "banana", "cherry"]
    若是數組中包含undefined元素,它們會被排到數組的尾部。更多例子在index.js中。
  4. concat()

    Array.concat()建立並返回一個新數組,它的元素包括調用concat()的原始數組的元素和concat()的每一個參數。若是這些參數中的任何一個自身是數組,則鏈接的是數組的元素,而非數組自己。
    var a = [1, 2, 3];
    a.concat(4,5)                    // => [1,2,3,4,5]
    a.concat([4,5], [6,7]);          // => [1,2,3,4,5,6,7]
  5. slice()

    Array.sliece方法返回指定數組的一個片斷或者子數組。它的兩個參數分別制定了片斷的開始和結束位置。返回的數組包含第一個參數指定的位置和全部到但不包含第二個參數指定位置之間的全部數組元素。若是隻指定一個參數,返回的數組將包含從開始位置到數組結尾的全部元素。
    var a = [1,2,3,4,5];
    a.slice(0, 3);       // => [1,2,3]
    a.sliece(3);         // => [4,5]
  6. splice()

    Array.splice()在數組中插入或刪除元素的通用方法。第一個參數制定了插入或者刪除的起始位置,第二個參數制定了應該從數組中刪除的元素個數,若是省略第二個參數,從起始位置到結尾的全部元素都將被刪除。返回一個由刪除元素組成的數組。

    例如:

    var _arr = [1, 2, 3, 4, 5, 6, 7, 8];
    _arr.splice(4);
    console.log(_arr);
    // 返回[5, 6, 7, 8];_arr是[1,2,3,4]
    _arr.splice(1, 2);
    console.log(_arr);
    // 返回[2, 3];_arr是[1,4]
    splice()的前兩個參數制定了須要刪除數組元素。後面的任意個數的參數指定了須要插入到數組中的元素,從第一個參數指定的位置開始插入。
    var a = [1, 2, 3, 4, 5];
    a.splice(2, 0 , 'a', 'b');               // 返回[],a = [1, 2, 'a', 'b', 3, 4, 5];
    a.splice(2, 2, [1,2], 3);                // 返回['a','b'],a = [1,2,[1,2],3,3,4,5];
    注意:區別於concat(),splice()會插入數組自己而非數組的元素。
  7. push()和pop():

    push()在數組尾部添加一個或多個元素,並返回數組新的長度。
    
    pop()刪除數組的最後一個元素,減少數組長度並返回它刪除的值。
  8. unshift()和shift()

    unshift()在數組的頭部添加一個或多個元素,並將已存在的元素移到更高索引的位置來得到足夠的空間,最後返回數組新的長度。
    
    shift()刪除數組的第一個元素並將其返回,而後把全部隨後的元素下移一個位置來填補頭部的空缺。
六 ECMAScript 5中的數組方法
  1. forEach()

    從頭至尾遍歷數組,爲每一個元素調用指定的函數。使用三個參數調用該函數:數組元素、數組元素索引和數組自己。
    var data = [1,2,3,4,5];
    var sum = 0;
    data.forEach(function(value){
    sum += value;
    });
    console.log(sum);    // => 15
  2. map()

    將調用的數組的每一個元素傳遞給指定的函數,並返回一個數組,它包含該函數的返回值。例如:
    var a_arr = [1, 2, 3];
    var b = a_arr.map(function(x){
    return x*x;
    })
    console.log(b);  // =>b = [1, 4, 9]
  3. filter()

    filter()方法返回的數組元素是調用的數組的一個子元素。傳遞的函數是用來邏輯斷定的:該函數返回true或false。
    var a = [1,2,3,4,5];
    var smalls = a.filter(function(x){
    return x < 3;
    });
    // => smalls = [1,2]
  4. every()和some()

    every()和some()方法是數組的邏輯斷定:它們對數組元素應用指定的函數進行斷定,返回true或false。
    
    every()針對數組中的全部元素調用斷定函數都返回true,它才返回true。
    
    somt()數組中只殺有一個元素調用函數斷定返回true,它就返回true。
    
    注意:一旦every()和some()確認該返回什麼值它們就會中止遍歷數組元素。
  5. reduce()和reduceRight()

    reduce()和reduceRight()方法使用指定的函數將數組元素進行組合,生成單個值。
    var _data = [1,2,3,4,5];
    var sum = _data.reduce(function (x, y) {
       return x+y;
    }, 0);
    // 求和 => 15
    var product = a.reduce(function (x, y) {
    return x*y;
    }, 1);
    // 求積 => 120
    var max = a.reduce(function (x, y) {
       return x>y ? x : y;
    });
    // 求最大值 => 5
    reduceRight()工做原理和reduce()同樣,不一樣的是它按照數組索引從高到低處理數組。
  6. indexOf()和lastIndexOf()

    搜索整個數組紅具備給定值的元素,返回找的第一份元素的索引或者若是沒有找到就返回-1。indexOf()從頭到尾搜索,lastIndexOf()則反向搜索。例如:
    var a = [0, 1, 2, 1, 0];
    a.indexOf(1);         // => 1
    a.lastIndexOf(1);     // => 3
    a.indexOf(3);         // => -1
七 數組類型

使用Array.isArray()函數來判斷是否爲數組。

Array.isArray([]);            // => true
    Array.isArray({});            // => false
相關文章
相關標籤/搜索