js 數組的全部操做

js的數組操做有不少,這裏記錄了經常使用的和不經常使用的數組操做方法。前端

1、數組的建立數組

  數組的建立有兩種方法,一種是經過字面量,另外一種是經過Array構造函數。瀏覽器

  1.字面量 數據結構

var num1 = [1,2,3];

  值得注意的是,利用字面量建立數組時,不可在最後一個數組元素添加「,」,由於在老版本的瀏覽器中,會出現bug。以下面的例子,在num2中,會建立一個包含1,2,3,undefined四個項或包含1,2,3三個項的數組。函數

var num2 = [1,2,3,];//不推薦的寫法

  2.Array構造函數spa

var num3 = new Array();//空數組

  Array()可接收包含項做爲參數,這時,會建立包含傳入項的數組,如num4。code

  也可接收一個類型爲number的數字做爲參數,這時,會建立數組長度爲該數字的數組,如num5。blog

var num4 = new Array("1","2","3");//至關於["1","2","3"]
var num5 = new Array(3);//length爲3,元素均爲undefined的數組

2、數組的轉換排序

  關於數組的轉換,這裏只提數組轉換成字符串的兩種方法。分別是toString()和join()。隊列

  1.toString()

  該方法會返回數組各個項以逗號隔開的字符串。在使用alert(array)方法打印數組時,會隱性調用toString()方法。

var num6 = [1,2,3];
var num6Str = num6.toString();//"1,2,3"
alert(num6);//"1,2,3"

  2.join()

  join()只接收一個參數,該參數爲數組中各項拼接的字符串,若不傳參,默認爲用「,」做爲分隔符,效果至關於toString()方法。

var num7 = [1,2,3];
num7.join("$");//"1$2$3"
num7.join();//"1,2,3"

3、棧方法

  棧是一種先進先出的數據結構,而數組提供的push()和pop()方法相似棧的行爲,因此叫棧方法。

  1.push()

  push()方法能夠接收多個參數,把它們依次添加至數組末尾,並返回修改後數組長度。

var num8 = [1,2,3];
var num8Length = num8.push(4,5);
alert(num8);//1,2,3,4,5
alert(num8Length);//5

  2.pop()

  pop()方法是將數組的最後一項移除,並返回移除項。

var num9 = [1,2,3];
var last = num9.pop();//3

4、隊列方法

  1.shift()

  shift()方法是將數組的第一項移除,並返回移除項。

var num10 = [1,2,3];
var first = num10.shift();//1

  2.unshift()

  unshift()方法與shift()方法用途相反,該方法能夠接收多個參數,將參數依次加入數組的前端,並返回修改後數組的長度。

var num11 = [1,2,3];
var addArray = num11.unshift("-1","0");//5

5、重排序方法

  1.reverse()

  reverse()方法是使數組中的項進行反轉,並返回通過排序後的數組。

var num12 = [1,2,3];
num12.reverse();//[3,2,1]

  2.sort()

  sort()方法是默認爲按照ASCII碼進行順序排序。在使用sort()方法時,會先隱性調用toString()方法將數組中的每一項進行字符串轉化,其實是進行字符串ASCII進行排序,並返回排序後的數組。

  對於數組項中均爲number類型的數據,咱們能夠在sort()中傳入一個比較函數,該比較函數接收兩個參數,第一個參數爲前一項,第二個參數爲後一項。將兩個參數進行對比,若return的值>0,則將兩個對比項進行調換位置,調換位置的項,再與較前的一項進行對比,依次類推,直到return值返回爲0或者<0爲止。

  在比較函數中,return值>0,數組項調換位置;return值<0,數組項不調換位置;return值=0,意味着兩項相等,數組項不調換位置。

 var num13 = [3,2,7,14,111,0];
num13.sort(function(value1,value2){
    return value1-value2;
});
alert(num13);//0,2,3,7,14,111

6、操做方法

  1.concat()

  concat()方法是將數組與數組進行連結或者將數組項添加至數組末尾。

  concat()會建立當前數組的一個副本,而後將接收到的參數依次添加到這個副本的末尾。若是沒有傳入參數,則返回的是當前數組的副本,至關於數組的複製;若是傳入一個或多個數組參數,則會在副本的末尾依次添加數組參數中的每個項;若是傳入的是一個或多個非數組類型的數據,則這些值會依次被添加至副本的末尾。

  注:可利用concat()方法返回一個新數組的特性用於數組的複製。

var num14 = [1,2,3];
var num15 = num14.concat([4,5],[6,7]);
alert("參數爲多個數組時:"+num15);//1,2,3,4,5,6,7
var num16 = num14.concat(4,5);
alert("參數爲非數組時:"+num16);//1,2,3,4,5

  2.slice()

  slice()能夠基於當前數組中的一個或多個項建立一個新的數組,並返回新的數組。

  slice()能夠接收一個或兩個參數,即要返回項的起始位置和結束位置。當只有一個參數時,會返回從該參數指定的位置開始到數組的末尾位置;傳入兩個參數時,會返回從起始位置到結束位置前一項的數組項。

  注:可利用slice(0)方法返回一個新數組的特性用於數組的複製。

var num17 = [1,2,3];
num17.slice(1);//[2,3]
num17.slice(1,2);//[2]

  3.splice()

  splice()方法是比較強大的數組操做方法。由於能夠利用該方法對數組進行刪除,插入和替換操做。

  刪除:splice(index,number),只須要傳入兩個參數,index爲刪除的第一項位置,number爲刪除的項數。

  插入:splice(index,0,value1,value2,...),須要至少傳入三個參數,index爲從位置index處插入value1,value2...。

  替換:splice(index,number,value1,value2...),須要至少傳入三個參數,index爲開始替換的位置,number爲替換的項數,value1,value2等是替換的項。

  返回值:splice()方法返回的始終是一個數組,如有刪除項,則返回含有全部被刪除項的數組,若沒有刪除項,這返回空數組。

var num18 = [1,2,3];
//刪除操做
num18.splice(0,2);//返回[1,2],此時num18 = [3]
//插入操做
num18.splice(1,0,4,5,6);//返回[],此時num18 =[3,4,5,6]
//替換操做
num18.splice(2,2,3,3);//返回[5,6],此時num18 = [3,4,3,3]

7、位置方法

  位置方法包含了兩種方法,分別爲indexOf()和lastIndexOf(),兩個方法都接收兩個參數,第一個參數爲查找項,第二個參數(可選)爲查找的起始位置,都返回查找項所出現的第一個位置,沒有找到則返回-1。查找項和數組中的每一項進行比較時,使用使用的是全等操做符===,故須要值和數據類型一致。

  1.indexOf()

  indexOf(value)該方法是從數組的開頭開始查找值爲value的項。

  indexOf(value,index)該方法是從下標爲index的項開始查找值爲value的項。

var num19 = [1,2,3];
num19.indexOf(1);//返回0
num19.indexOf(3,1);//返回2

  2.lastIndexOf()

  lastIndexOf(value)該方法是從數組的末尾開始查找值爲value的項。

  lastIndexOf(value,index)該方法是從數組末尾開始往前(從0開始)index的項開始向數組開頭查找值爲value的項。

var num20 = [1,2,3];
num20.lastIndexOf(1);//返回0
num20.lastIndexOf(1,1);//返回0

8、迭代方法

  1.every()

  every(function(item,index,array){reutrn...;})對數組的每一項都傳入給定函數,如該函數對每一項都返回true,則返回true,不然爲false。(相似且操做符)

var num21 = [1,2,3];
var every = num21.every(function(item,index,array){
    return (item>0);
});//true
var every1 = num21.every(function(item,index,array){
    return (item>2)
});//false

  2.some()

  some(function(item,index,array){return...})對數組的每一項都傳入給定函數,如函數對某一項返回true,則返回true,不然爲false。(相似或操做符)

var num22 = [1,2,3];
var some= num21.some(function(item,index,array){
    return (item>2);
});//true
var some1= num22.some(function(item,index,array){
    return (item>6)
});//false

  3.forEach()

  forEach(function(item,index,array){})對數組的每一項都傳入給定函數,沒有返回值。(相似for循環)

var num23 = [1,2,3];
num23.forEach(function(item,index,array){
    console.log(item);
});

  4.map()

  map(function(item,index,array){})對數組的每一項都傳入給定函數,返回值爲對數組操做後的數組。

var num24 = [1,2,3];
num24.map(function(item,index,array){
    return item+2;
});//[3,4,5]

  5.filter()

  filter(function(item,index,array){})對數組的每一項都傳入給定函數,返回值爲給定函數返回爲true的項組成的數組。

var num25 = [1,2,3];
num25.filter(function(item,index,array){
    return (item>2);
});//[3]

9、歸併方法

  歸併方法有兩個,分別爲reduce()和reduceRight()。該兩個方法接收兩個參數,分別爲給定函數和pre初始值(可選)。均迭代數組的每一項傳入給定函數,並構造一個最終返回值。

  1.reduce()

  reduce(function(pre,cur,index,array){return...})從第一項開始,迭代時,會將給定函數返回的值做爲pre參數給到下一次迭代,直到最後。cur指當前項,index爲當前項下標,array爲調用的數組。

var num26 = [1,2,3];
//只傳給定函數 num26.reduce(function(pre,cur,index,array){
return pre+cur; });//6
//傳入給定函數和pre初始值
num26.reduce(function(pre,cur,index,array){
    return pre+cur; },4);//10

  2.reduceRight()

  reduceRight()和reduce()方法除了從數組的末尾仍是開始開始遍歷不一樣外,其餘都一致。reduceRight()是從數組末尾開始遍歷。

相關文章
相關標籤/搜索