Array的方法

一、轉換方法

——此方法不會對原數組產生影響。所有對象都有toLocaleString()、toString()、valueOf()方法。

  • toString(); 返回以逗號拼接的字符串。
  • toLocaleString(); 返回本地格式的字符串。
  • valueOf(); 返回的還是數組。
  • join(); 返回按傳入符號分割的字符串

1、toString()和valueOf()

var arr1 = ["hi", "hello"];
console.log(arr1.toString()); //返回hi,hello
console.log(typeof arr1.toString()); //返回string

console.log(arr1.valueOf()); //返回原數組
console.log(typeof arr1.valueOf()); //返回object

2、toLocaleString()

oLocaleString()方法經常返回和toString()、valueOf()方法一樣的值。不同的是:不會被默認調用;日期有一定的影響。

var arr1 = ["hi", "hello", new Date()];

document.write(arr1.toString());

document.write(arr1.valueOf());

document.write(arr1.toLocaleString());
//返回結果如下:
hi,hello,Sat Nov 28 2015 23:42:12 GMT+0800 (中國標準時間)
hi,hello,Sat Nov 28 2015 23:42:12 GMT+0800 (中國標準時間)
hi,hello,2015/11/28 下午11:42:12 —— 本地格式區域字符串

其中,toLocaleString()獲取的是本地電腦上的時間

3、join()

接受一個參數(分割符),傳入null或undefined時一空格分割。默認使用逗號分隔。

    var arr1 = ["hi", "hello", new Date()];

    document.write(arr1.join("/"));
    //返回hi/hello/Sat Nov 28 2015 23:52:47 GMT+0800 (中國標準時間)
    document.write(typeof arr1.join("/")); //返回string

    document.write(arr1);
    //返回hi,hello,Sat Nov 28 2015 23:52:47 GMT+0800 (中國標準時間)

二、棧方法

ECMAScript數組也提供了一種讓數組的行爲類似於其他數據結構的方法。具體來說,數組可以表現的像棧一樣,後者是一種可以限制插入和刪除項的數據結構。
棧是一種LIFO(Last-In-First-Out先進後出)的數據結構,也就是最新添加的像最早被移除。而棧中項的插入(叫做推入)和移除(叫做彈出),只發生在一個位置——棧的頂部。ECMScript爲數組專門提供了push()和pop()方法,以便實現類似棧的行爲。

  • push();可以接收任意數量的參數,把它們逐個添加到數組末尾,並返回修改後的數組的長度
  • pop();從數組末尾移除最後一項,減少數組的length值,然後返回移除的項

1、push()

    -----例:-----
    var arr = ["red"];
    var arr1 = ["blue", "yellow"];

    console.log(arr.push("blue", "yellow")); //3
    console.log(arr); //["red", "blue", "yellow"]

    console.log(arr.push(arr1)); //2
    console.log(arr); //["red", Array[2]]

push()插入數組時,該數組被當做一個元素插入,因此不管該數組中有多少了元素都只佔一個長度。

2、pop()

-----例:-----
var arr = ["haha", "hehe"];

console.log(arr.pop()); //hehe
console.log(arr.length); //1

三、隊列方法

棧數據結構的訪問規則時LIFO(先進後出),而隊列數據結構的訪問規則是FIFO(First-In-First-Out先進先出)。隊列在列表的末端添加項,從列表的前端移除項。實現這一操作的素組方法是unshift()和shift()。

  • unshift();在數組前端添加任意個項並返回新數組的長度。 ——【IE7-unshift()方法總是返回undefined而不是新數組的長度】
  • shift();移除數組中的第一個項並返回該項

1、unshift()

    -----例:-----
    var arr = ["red"];
    var arr1 = ["blue", "yellow"];

    console.log(arr.unshift("blue", "yellow")); //3
    console.log(arr); //["blue", "yellow", "red"]

    console.log(arr.unshift(arr1)); //2
    console.log(arr); //[Array[2], "red"]

unshift()方法同push()方法一樣,插入數組時,該數組被當做一個元素插入,因此不管該數組中有多少了元素都只佔一個長度。

2、shift()

-----例:-----
var arr = ["haha", "hehe"];

console.log(arr.shift()); //haha
console.log(arr.length); //1

四、排序方法

  • reverse();反轉數組項的順序。(reverse反向)
  • sort();按升序/降序排列數組項,返回排序後的數組
  • 冒泡算法

1、revers()

    -----例:-----
    var arr = ["red", "blue", "yellow"];

    document.write(arr.reverse()); //yellow,blue,red

    document.write("<br />");
    document.write(arr); //yellow,blue,red

2、sort()

爲了實現排序,sort()方法會調用每個數組項的toString()轉型方法,然後比較的到的字符串,以確定如何排序。即使數組中的每一項都是數值,sort()方法比較的也是字符串。

    -----例:-----
    var arr = [0, 1, 5, 10, 15];
    console.log(arr.sort());
    console.log(arr); 
    //都返回: [0, 1, 10, 15, 5]

此處比較的是數值字符串(即比較字符串對應的字符編碼值)。

因爲sort()方法在很多情況下不是最佳方案,因此sort()方法可以接收一個比較函數作爲參數,以便我們指定哪個值位於哪個值的前面。

如果爲 sortfunction 參數提供了一個函數,那麼該函數必須返回下列值之一:

負值,如果所傳遞的第一個參數比第二個參數小。

,如果兩個參數相等。

正值,如果第一個參數比第二個參數大。

升序:

-----例:-----
function compare(value1, value2) {
    if(value1 < value2) { //如果第一個參數比第二個參數大
        return -1;
    } else if(value1 > value2) {
        return 1;
    } else {
        return 0;
    }
}

var arr = [0, 1, 5, 10, 15];
console.log(arr.sort(compare));
console.log(arr); 
//都返回: [0, 1, 5, 10, 15]

反序(只需將返回值正負更換一下就可以了)——如果要反序用revers()方法更加方便

-----例:-----
function compare(value1, value2) {
    if(value1 < value2) { //如果第一個參數比第二個參數大
        return 1;
    } else if(value1 > value2) {
        return -1;
    } else {
        return 0;
    }
}

var arr = [0, 1, 5, 10, 15];
console.log(arr.sort(compare)); 
console.log(arr);
//都返回: [15, 10, 5, 1, 0]

排序——冒泡算法

-----例:-----
var arr = [0, 1, 5, 10, 15];
for(var i = 0; i < arr.length - 1; i++) {
    for(var j = i + 1; j < arr.length; j++) {
        if(arr[i] < arr[j]) {
            var a = arr[i];  //定義一箇中間變量
            arr[i] = arr[j];
            arr[j] = a;
        }
    }
}
console.log(arr); //[15, 10, 5, 1, 0]
/*---------數組元素按從大到小排序---此方法爲冒泡排序---------------------------*/

五、操作方法

  • concat(); 複製原數組,將其與傳入參數/數組合並並返回合併後的新數組。 ——【並不會對原數組產生影響】
  • slice(startINDEX, endINDEX); 返回截取原數組中的項。 ——【並不會對原數組產生影響】
  • splice(); 返回被刪除的元素。有三種功能:刪除、插入、替換。主要用途是向數組的中部插入項。

1、concat()

在沒有傳遞參數的情況下,它只是複製當前數組並返回副本;

如果傳遞的參數是一個或多個數組,則該方法會將這些數組中的每一項都添加到結果數組中;

如果傳遞的值不是數組,這些值就會被簡單的添加到結果數組的末尾。——有先後順序

-----例:-----
var arr = ["red", "yellow"];

console.log(arr.concat("blue"));
console.log(arr);
//返回結果如下: 
["red", "yellow", "blue", "gray", "123"]
["red", "yellow"]


console.log(arr.concat(["blue", "gray"], ["123"]));
console.log(arr);
//返回結果如下: 
["red", "yellow", "blue"]
["red", "yellow"]

2、slice()

如果只用一個參數,則返回從該參數指定位置開始到當前數組末尾的所有的項;

如果有兩個數組, 則返回起始位置和結束位置之間的項——但不包含結束位置的項

-----例:-----
var arr = ["red", "yellow", "blue", "gray", "back"];

console.log(arr.slice(1));
console.log(arr.slice(1, 3));
console.log(arr);
//返回結果如下:
["yellow", "blue", "gray", "back"]
["yellow", "blue"]
["red", "yellow", "blue", "gray", "back"]

如果傳遞的參數中有一個是負數,則用數組長度加上該數來確定相應的位置(反向取得該索引位置的項)。

-----例:-----
var arr = ["red", "yellow", "blue", "gray", "back"];

console.log(arr.slice(-3, -1));  
//等價於console.log(arr.slice(2, 4));
console.log(arr);
//返回結果如下:
["blue", "gray"]
["red", "yellow", "blue", "gray", "back"]

如果傳遞的參數,結束位置小於起始位置,則返回空數組。

3、splice()

接收三個參數:

  • 1、起始位置;
  • 2、刪除個數;
  • 3、插入/替換元素或數組。

    插入的元素索引值爲splice方法的第一個參數對應的索引位置。

    -----例:-----
    var arr = ["red", "yellow", "blue", "gray", "back"];
    console.log(arr.splice(3, 0,"hhhhhhhhhhhhhhhh"));  //插入的元素的索引爲3
    console.log(arr);
    //返回結果如下:
    []
    ["red", "yellow", "blue", "hhhhhhhhhhhhhhhh", "gray", "back"]
    

六、索引位置方法

  • indexOf(item, startIndex); 返回需查找的項第一次出現的索引值;
  • lastIndexOf(item, startIndex); 返回需查找的項最後一次出現的索引值;

    都接受兩個參數:要查找的項和(可選的)表示查找七點位置的索引。當沒有找到所匹配的項時,返回值爲-1。

    例:
    var arr = [1, 2, 3, 1, 4, 5];
    console.log(arr.indexOf(1)); //0
    console.log(arr.lastIndexOf(1)); //3
    

    在將需查找的項與數組中的每一項相比較時,會使用全等操作符(===)相比較。也就是說,要求查找的項必須全等。

    console.log(arr.indexOf(“1”)); //-1

七、迭代方法

  • every(fn); 函數fn對每一項都返回true,則返回true;
  • some(fn); 函數fn對某一項返回true,則返回true;
  • filter(fn); 返回函數fn返回值爲true的所有項組成的數組;
  • map(fn); 返回每次函數調用的結果組成的數組。
  • forEach(fn); 對數組中的每一項運行給定函數。此方法沒有返回值。

1、every()方法:

    var arr = [1, 2, 3, 1, 4, 5];
    var everyItem1 = arr.every(function(item, index, arr) {
        return (item < 3);
    }); 
    var everyItem2 = arr.every(function(item, index, arr) {
        return (item < 10);
    }); 
    console.log(everyItem1); //false
    console.log(everyItem2); //true
    console.log(arr); //[1, 2, 3, 1, 4, 5]

2、some()方法:

    var arr = [1, 2, 3, 1, 4, 5];
    var someItem1 = arr.some(function(item, index, arr) {
        return (item < 3);
    }); 
    var someItem2 = arr.some(function(item, index, arr) {
        return (item < 10);
    }); 
    console.log(someItem1); //true
    console.log(someItem2); //true
    console.log(arr); //[1, 2, 3, 1, 4, 5]

3、filter()方法:

    var arr = [1, 2, 3, 1, 4, 5];
    var filterItem1 = arr.filter(function(item, index, arr) {
        return (item < 3);
    }); 
    var filterItem2 = arr.filter(function(item, index, arr) {
        return (item < 10);
    }); 
    console.log(filterItem1); //[1, 2, 1]
    console.log(filterItem2); //[1, 2, 3, 1, 4, 5]
    console.log(arr); //[1, 2, 3, 1, 4, 5]

此方法適合查詢某些符合條件的所有數組項。

4、map()方法:

    var arr = [1, 2, 3, 1, 4, 5];
    var mapItem1 = arr.map(function(item, index, arr) {
        return (item * 3);
    }); 
    console.log(mapItem1); //[3, 6, 9, 3, 12, 15]
    console.log(arr); //[1, 2, 3, 1, 4, 5]

此方法適合創建包含的項與另一個數組一一對應。

5、forEach()方法:

    var arr = [1, 2, 3, 1, 4, 5];
    var forEachItem1 = arr.forEach(function(item, index, arr) {
        alert(item);
        //執行某些操作
    }); 

8、歸併方法

  • obj.reduce(callback, startIndex); 從數組第一項開始遍歷數組;
  • obj.reduceRight(callback, startIndex); 從數組最後一項開始遍歷數組。

    兩個方法都會迭代數組中所有的項,然後構建一個最終返回的值。reduce()和reduceRight()最大的區別也是唯一的區別就是遍歷數組項的順序不同

兩個方法都接收兩個參數:一個是在每一項上調用的函數,另一個是作爲歸併基礎的起始索引值(爲可選參數)。

傳入的函數callback接收四個參數:前一個值;當前值;項的索引值,數組對象。這個函數返回的任何值都會作爲第一個參數自動傳給下一項。第一次迭代發生在數組的第二項上,因此第一個參數是數組的第一項,第二個參數就是數組的第二項。

1、obj.reduce();

var obj = [1, 2, 3, 4, 5];
var sum = obj.reduce(function(prev, next, index, arr) {
    console.log(index);
    return prev + next
});
console.log(sum);
//1
//2
//3
//4
//15

第一次執行回調函數,傳入的prev是1,next是2。第二次,prev是3(1+2),next是3(數組的第三項)。

obj.reduceRight(); 順序相反

var obj = [1, 2, 3, 4, 5];
var sum = obj.reduceRight(function(prev, next, index, arr) {
    console.log(index);
    return prev + next
});
console.log(sum);
//3
//2
//1
//0
//15

第一次執行回調函數,傳入的prev是5,next是4。第二次,prev是9(5+4),next是3(數組的倒數第三項)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章