淺談JavaScript中數組操作常用方法

                    JavaScript中數組操作常用方法

1.檢測數組

1)檢測對象是否爲數組,使用instanceof 操作符

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

2)獲取對象的類型,比較是否爲object類型(此方法只能檢測是否爲Object,不推薦)

if(typeof(value)=="Object")
{
//對數組執行某些操作
}

3)檢測對象是否爲數組,使用Array.isArray()方法(只支持ie9+,firefox 4+,safari 5+,opera 10.5+和chrome)

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

2.轉換方法

所有對象都具有toLocaleString(),toString()和valueOf()方法.

 

調用數組的toString()方法會返回由數組中每個值的字符串形式拼接而成的一個以逗號分隔的字符串.

調用valueOf()返回的還是數組.

 

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

var colors=["red","green","blue"];
alert(colors.join("||"));//red||green||blue

3.棧方法

棧是一種LIFO(Last-In-First-Out,後進先出)的數據結構.

JavaScript爲數組專門提供了push()和pop方法()方法,以便實現類似棧的行爲

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

2):pop()方法則從數組末尾移除最後一項,減少數組的length值,然後返回移除的項.

複製代碼
var colors=new Array();//創建一個數組
var count=colors.push("red","green");//推入兩項
alert(count);//2


count=colors.push("black");//推入另一項
alert(count);//3

var item=colors.pop();//移除最後一項,並返回最後一項的值
alert(item);//“black”
alert(colors.length);//2


以上代碼首先我們使用push()將兩個字符串推入數組的末尾,並將返回的結果保存在變量count中.然後再推入一個值,而結果任然保存在count中.因爲此時數組中包含3項,所以push()返回3.
在調用pop()時,它會返回數組的最後一項,即字符串"black".此後,數組中僅剩兩項.
複製代碼

4.隊列方法

棧數據結構的訪問規則是LIFO(Last-In-First-Out,後進先出),而隊列數據結構的訪問規則是FIFO(First-In-First-Out,先進先出).

隊列在列表的末端添加項,從列表的前端移除項.

JavaScript爲隊列提供了shift()和unshift()方法

1):shift()移除數組中第一個項並返回改項,同時將數組長度減1.

2):unshift()在數組前端添加任意個項並返回新數組的長度.

 

結合push()和pop方法,shift()和unshift()方法 做的一個實例

複製代碼
var n=new Array("張三","李四");
            n.push("王五");//添加參數到數組末尾,並修改數組長度
            n.shift();//移除數組第一項,並返回該項
            
            n.unshift("小錢");//添加參數到數組前端
            n.pop();//從數組末尾移除最後一項
            
            //循環顯示出數組的值
            for(var i=0;i<n.length;i++)
            {
                console.log(n[i]);
            }
       //小錢 李四 
複製代碼

5.重排序方法

數組中已經存在兩個可以直接用來重排序的方法:reverse()和sort()

在默認情況下,sort()方法回按升序排列數組項——即最小的值位於最前面,最大的值排在最後面,爲了實現排序,sort()方法會調用每個數組項的toString()轉型方法,

然後比較得到的字符串,以確定如何排序.即數組中的每一項都是數值,sort()方法比較的也是字符串,如下所示

    var values=[0,1,5,10,15];
            values.sort();//進行排序顯示
            alert(values);//0,1,10,15,5

sort()方法根據測試字符串的結果改變原來的順序.因爲數組5雖然小雨10,但在進行字符串比較時,“10”則位於“5"的前面,於是數組的順序就被修改了.這種排序方式在很多情況下都不是最佳方案,因此sort()方法可以接收一個比較函數作爲參數,以便我們制定哪個值位於哪個值的前面.

 

比較函數接收兩個參數,如果第一個參數位於第二個之前則返回一個負數,如果兩個參數相等則返回0,如何第一個參數位於第二個之後則返回一個正數.以下就是一個簡單的比較函數:

複製代碼

function compare(value1,value2)
            {
                if(value1<value2)
                {
                    return -1;
                }else if(value1==value2)
                {
                    return 0;
                }else
                {
                    return 1;
                }
            }
            var values=[0,1,5,10,15];
            values.sort(compare);//進行排序顯示
            alert(values);//0,1,5,10,15
            
複製代碼

將比較函數傳遞到sort()方法之後,數值仍然保持了正確的升序.當然,也可以通過比較函數產生降序排序的結果,只要交換比較函數的返回值即可.

 

注:value1<value2 返回-1表示正序,返回1表示倒序

當然如果反轉數組原來的順序,使用reverse()方法要更快一些

當然如何對於數值類型或其valuesOf()方法會返回數值類型的對象類型,可以使用一個更簡單的比較函數.這個函數只要用第一個值減第二個值即可

function compare(value1,value2)
{
return value1-value2;
}
此方法返回的是正序

6.操作方法

1):concat()方法可以基於當前數組中的所有項創建一個新數組.

在沒有給concat()方法傳遞參數的情況下,它只是複製當前數組並返回副本.如何傳遞給concat()方法的是一個或多個數組,

則該方法會將這些數組中的每一項逗添加到結果數組中.如果傳遞的值不是數組,這些值就會被簡單地添加到結果數組的末尾.下面看一個列子

var colors=["red","green","blue"];
            var color2=colors.concat("yellow",["black","brown"]);
            alert(color2);//red,green,blue,yellow,black,brown

2):slice()方法基於當前數組中的一或多個項創建一個新數組.

slice()方法可以接收一或兩個參數,即要返回的起始和結束位置.

在只有一個參數的情況下,slice()方法返回從該參數指定位置開始到當前數組末尾的所有項.

如何有兩個參數,該方法返回起始和結束位置之間的項——但不包括結束位置的項.slice()方法不會影響原始數組,下面看一個列子

var colors=["red","green","blue","yellow","black"];
            colors.split(1);//green,blue,yellow,black
            colors.split(1,4)//green,blue,yellow

 3):splice()方法恐怕要算是最強大的數組方法了,它有很多種用法。

splice()的主要用途是向數組的中部插入項,但使用這種方法的方式則有如下3種

a:刪除:可以刪除任意數量的項,只需指定2個參數:要刪除的第一項的位置和要刪除的項數.

列如:splice(0,2)會刪除數組中的前兩項.

 

b:插入:可以向指定位置插入任意數量的項,只需要提供3個參數:起始位置,0(要刪除的項數)和要插入的項.

如何要插入多個項,可以再傳入第四,第五,以至任意多個項.

列如:splice(2,0,"red","green")會從當前數組的位置2開始插入字符串"red"和"green"

 

c:替換:可以向指定位置插入任意數量的項,且同時刪除任意數量的項,只需要提供3個參數:起始位置,要刪除的項數和要插入的任意數量的項.

插入的項數不必和和刪除的項數相等.

列如:splice(2,1,"red","green")會刪除當前數組位置2的項,然後再從位置2開始插入字符串"red"和"green"

 

注:插入和替換方式相同,不同點就在於第2參數,爲0表示插入不刪除,大於0表示要刪除的數量

splice()方法始終都會返回一個數組,該數組中包含從原始數組中刪除的項(如果沒有刪除任何項,則會返回一個空數組).

 


下面有個列子用了上述3中splice()方法,如下:

複製代碼
var colors=["red","green","blue"];
            var removed=colors.splice(0,1);//刪除第一項
            alert(colors);//green,blue
            alert(removed);//red,返回的數組中只有一項
            
            removed=colors.splice(1,0,"yellow","orange");//從位置1開始插入2條數據
            alert(colors);//green,blue,yellow,orange
            alert(removed);//返回一個空數組
            
            removed=colors.splice(1,1,"red","purple");//從位置1插入2條數據,並刪除位置1的數據
            alert(colors);//green,red,purple,yellow,orange
            alert(removed);//yellow,返回的數組中只包含一項
複製代碼

 

7.位置方法

兩個位置方法:indexOf()和lastIndexOf(),這兩個方法都接收兩個參數:要查找的項和(可選的)表示查找七點位置的索引.

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

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

 

這兩個方法都返回查找的項在數組中的位置,或者在沒找到的情況下返回-1.

在比較第一個參數與數組中的每一項時,會使用全等操作符,也就是說,要求查找的項必須嚴格相等

下面寫了這2個方法的實例,如下:

複製代碼
var numbers=[1,2,3,4,5,4,3,2,1];
            alert(numbers.indexOf(4));//3 返回第一個出現的4位置
            alert(numbers.lastIndexOf(4));//5 返回最後一個出現的4位置
            alert(numbers.indexOf(4,4));//5  從位置4開始查找第一個4出現的位置
            alert(numbers.lastIndexOf(4,4));//3 從位置4開始查找最後一個4出現的位置
            
            
            var person={name:"ToNi"};
            var people=[{name:"ToNi"}];
            var morePeople=[person];
            alert(people.indexOf(person));//返回-1 必須嚴格相等,不僅僅是值相等
            alert(morePeople.indexOf(person));//返回0
複製代碼

 

 

本篇文章是參考JavaScript高級程序設計書籍

我看了書之後加以整理和自己本人的一些理解,需要能對大家有幫助,謝謝大家

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