首頁 > web前端 > js教程 > 主體

js數組方法

不言
發布: 2018-04-04 11:35:36
原創
1263 人瀏覽過

這次的這篇文章的內容是js陣列方法,現在分享給大家,也可以給有需要的朋友做參考


陣列建立

JavaScript中建立陣列有兩種方式,第一種是使用 Array 建構子:

1

2

#3

var#arr1 = new Array(); //建立一個空數組

var arr2 = new Array(20); // 建立一個包含20項目的陣列

#var arr3 =  new Array("lily","lucy"##, "Tom"); // 建立一個包含3個字串的陣列

建立陣列的第二種基本方式是使用陣列字面量表示法:

#

在讀取和設定數組的值時,要使用方括號並提供相應值的基於 0 #的數字索引:

1

2

3

#var arr4 = []; #//建立一個空數組

var arr5 = [20]; #// 建立一個包含#1項目的陣列

var arr6 = ["lily","lucy","Tom"]; #// #建立一個包含3個字串的陣列

1

2

3

#4

var#arr6 = ["lily" ,"lucy","Tom"]; #// 建立一個包含3個字串的陣列

#alert(arr6[0]); //lily

arr6[1] = "mary"// #修改第二項為mary

arr6[3] = "sean"#; #//增加第四項為sean

JavaScript 中陣列的length屬性是可以修改的,看下面的範例:

如果需要判斷一個物件是不是數組對象,在ECMAScript 5之前,我們可以透過 instanceof Array#去判斷,但是instanceof 運算子的問題在於,它假定只有一個全域執行環境。如果網頁中包含多個框架,那麼實際上就存在兩個以上不同的全域執行環境,從而存在兩個以上不同版本的 Array 建構子。如果你從一個框架向另一個框架傳入一個數組,那麼傳入的數組與在第二個框架中原生創建的數組分別具有各自不同的構造函數。

ECMAScript 5 新增了 Array.isArray()方法。這個方法的目的是最終確定某個值到底是不是數組,而不管它是在哪個全域執行環境中建立的。

陣列方法

#下面開始介紹陣列的方法,陣列的方法有陣列原型方法,也有從object物件繼承來的方法,這裡我們只介紹陣列的原型方法,陣列原型方法主要有以下內容:

join()
push()
pop()
shift()
unshift()
sort()
reverse()
concat()
slice()
splice()
indexOf()
lastIndexOf() ES5新增)
forEach()
ES5新增)
map()
ES5新增)##filter( )
ES5新增)#every()
ES5 新增)some()
(ES5

reduce()



reduceRight()

ES5新增)

針對

ES5新增的方法瀏覽器支援情況:Opera 11+ Firefox 3.6 + 

Safari 5+ 

Chrome 8+ Internet Explorer 9+對於支援的瀏覽器版本,可以透過Array

原型擴充來實作。以下詳細介紹一下各個方法的基本功能。

##1

2

3

var arr = ["lily","lucy", "Tom"]; // 建立一個包含3個字串的陣列

arr[arr.length] = "sean"//##在下標為3處(也就是陣列尾部)加上一項"sean"

arr.length =  arr .length-1; 

//#將陣列的最後一項刪除

1

#join()

######join(separator ): ######將陣列的元素組起一個字串,以######separator######為分隔符,省略的話則用預設用逗號為分隔符,該方法只接收一個參數:即分隔符號。 ########################1############2######

3

4

var arr = [1,2,3];

console.log(arr.join()); // 1,2,3

console.log(arr.join("-")); ##// 1-2-3

console.log(arr); // [1, 2, 3](原始陣列不變)

#透過join()方法可以實作重複字串,只需傳入字串以及重複的次數,就能傳回重複後的字串,函數如下:

2push()#和pop()

#push(): 可以接收任意數量的參數,把它們逐一加到陣列結尾,並傳回修改後陣列的長度。  
pop()
:陣列末端移除最後一項,減少陣列的 length 值,然後傳回移除的項。

1

2

3

4

#5

function##repeatString(str, n) {

return new Array(n + 1).join(str);

#}

##console. log(repeatString(

"abc", 3)); // abcabcabcconsole.log(repeatString (

"Hi", 5)); // HiHiHiHiHi

1

#2

3

4

5

6

7

var arr = ["Lily","lucy","Tom"];

var count = arr.push("Jack"#,"Sean");

console.log(count); // 5

console.log(arr); 

########################1 ###// ["Lily",  "lucy", "Tom", "Jack", "Sean"]###############var##### ## #it​​em = arr.pop();############console.log(item); ######// Sean############console .log(arr); ######// ["Lily",  "lucy", "Tom", "Jack"]###################

3shift() unshift()

shift():刪除原始數組第一項,並傳回刪除元素的值;如果數組為空則回傳undefined  
unshift:
將參數加入原始陣列開頭,並傳回陣列的長度

這組方法和上面的push()#和pop()#方法剛好對應,一個是操作數組的開頭,一個是操作數組的結尾。

1

#2

3

4

5

6

7

var arr = ["Lily","lucy","Tom"];

var count = arr.unshift("Jack","Sean");

console.log(count); // 5

console.log(arr); 

########################1 ###//["Jack",  "Sean", "Lily", "lucy", "Tom"]###############var##### ## #it​​em = arr.shift();############console.log(item); ######// Jack############console .log(arr); ######// ["Sean",  "Lily", "lucy", "Tom"]##################

4sort()

sort() :依升序排列數組項——即最小的值位於最前面,最大的值排在最後面。

在排序時,sort()#方法會呼叫每個陣列項目的 toString()轉型方法,然後比較得到的字串,以確定如何排序。即使數組中的每一項都是數值, sort()方法比較的也是字串,因此會出現以下的這種情況:

#

為了解決上述問題,sort()方法可以接收一個比較函數作為參數,以便我們指定哪個值位於哪個值的前面。比較函數接收兩個參數,如果第一個參數應該位於第二個之前則傳回一個負數,如果兩個參數相等則傳回 0,如果第一個參數應該位於第二個之後則傳回一個正數。以下就是一個簡單的比較函數:

#1

2

3

#4

5

var## arr1 = ["a""d"##"c"# , "b"];

console.log(arr1.sort()); 

// [ "a",  "b", "c", "d"]

arr2 = [13, 24, 51, 3];

#console.log(arr2.sort()); 

// [13, 24, 3, 51]

console.log(arr2); 

// [13, 24, 3, 51](元數組被改變)

#

如果需要透過比較函數產生降序排序的結果,只要交換比較函數傳回的值即可:

#1

##2

#3

4

#5

6

7

8

#9

10

11

#function compare(value1, value2) {

if (value1 < 值2) {

##return -1;

#else if (value1 > value2) {

return 1;##} 

else {

#return

#0; }

}

#arr2 = [13, 24, 51, 3];

#console.log(arr2.sort(compare)); 

// [3, 13, 24, 51]

1

2

3

4

5

6

7

8

#9

10

#11

function compare(value1, value2) {

if (value1 < 值2 ) {

return 1;

else if (value1 > value2) {

##return## -1;

else {

# #return 0;

}

#}

arr2 = [13, 24, 51, 3];

console.log(arr2.sort(compare)); // [51, 24, 13, 3]

#5reverse()

reverse():反轉陣列項目的順序。

6concat()

concat() :將參數加入原始數組。這個方法會先建立目前陣列一個副本,然後將接收到的參數加到這個副本的結尾,最後再傳回新建置的陣列。在沒有給 concat()方法傳遞參數的情況下,它只是複製目前陣列並傳回副本。

1

#2

3

var arr = [13, 24, 51, 3];

#console.log(arr.reverse()); //[3, 51, 24, 13]

console.log( arr); //[3, 51, 24, 13](原始陣列改變##)

1

#2

3

4

#var arr = [1, 3,5,7];

var arrCopy =  arr.concat(9,[11,13]);

console.log(arrCopy); //[1, 3, 5, 7, 9, 11, 13]

#console.log(arr); // [1, 3, 5, 7](原始數組未修改)

#從上面測試結果可以發現:傳入的不是數組,則直接把參數加到數組後面,如果傳入的是數組,則將數組中的各個項會加入到數組中。但是如果傳入的是一個二維數組呢?

1

#2

3

var arrCopy2 =  arr.concat([9,[11,13]]);

console.log(arrCopy2); //[1, 3, 5, 7, 9,  Array[2]]

#console.log(arrCopy2[5]); //[11, 13]

上述程式碼中,arrCopy2陣列的第五項是一個包含兩個項目的數組,也就是說concat方法只能將傳入數組中的每一項加到數組中,如果傳入數組中有些項是數組,那麼也會把這一數組項當作一項添加到arrCopy2 中。

7slice()

slice() :傳回從原始數組指定開始下標到結束下標之間的項目所組成的新數組。 slice()方法可以接受一或兩個參數,也就是要傳回項目的起始和結束位置。在只有一個參數的情況下, slice()方法傳回從該參數指定位置開始到目前陣列末端的所有項目。如果有兩個參數,則該方法傳回起始和結束位置之間的項目——但不包含結束位置的項。

1

#2

3

4

5

6

7

8

9

10

#var arr = [1,3,5,7,9,11];

var arrCopy = arr.slice(1);

var arrCopy2 = arr.slice(1,4);

var#arrCopy3 =​​  arr.slice(1,-2);

var arrCopy4 =  arr.slice(-4,-1);

console.log( arr); //[1, 3, 5, 7, 9, 11](原數組沒變)

#console.log(arrCopy); //[3, 5, 7, 9, 11]

console.log(arrCopy2); //[3, 5, 7]

console.log(arrCopy3); //[3, 5, 7]

console.log(arrCopy4); //[5, 7, 9]

#

arrCopy只設定了一個參數,也就是起始下標示為1,所以傳回的陣列為下標 1(包含下標1)開始到陣列最後。  
arrCopy2
設定了兩個參數,返回起始下標(包括1)開始到終止下標(不包括4)的子陣列。  
arrCopy3
設定了兩個參數,終止下標為負數,當負數出現時,負數加上數組長度的值(6)來取代該位置的數,因此就是從1開始到4(不包含)的子數組。  
arrCopy4
中兩個參數都是負數,所以都加上陣列長度6轉換成正數,因此相當於slice(2,5)

8splice()

splice() :很強大的陣列方法,它有很多種用法,可以實現刪除、插入和替換。

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

插入:可以向指定位置插入任意數量的項,只需提供# 3 個參數:起始位置、 0(要刪除的項目數)和要插入的項目。例如,splice(2,0,4,6)會從目前陣列的位置 2 開始插入46
取代:可以將任意數量插入指定位置的項,並且同時刪除任意數量的項,只需指定 3 個參數:起始位置、要刪除的項數和要插入的任意數量的項。插入的項數不必與刪除的項數相等。例如,splice (2,1,4,6)會刪除目前陣列位置 2 的項,然後再從位置 2 開始插入46

splice()方法總是會傳回一個數組,該數組包含從原始數組中刪除的項,如果沒有刪除任何項,則傳回一個空數組。

1

#2

3

4

5

6

7

#

8

9

#10

var arr = [1,3,5,7,9,11];

##var arrRemoved =  arr.splice(0,2);

#console.log(arr); //[5, 7, 9, 11]

console.log(arrRemoved); //[1, 3]

var arrRemoved2 =  arr.splice(2,0,4,6);

console.log(arr); #/ / [5, 7, 4, 6, 9, 11]

console.log(arrRemoved2); ##// []

var arrRemoved3 =  arr.splice(1,1,2,4);

console.log(arr ); 

// [5, 2, 4, 4, 6, 9, 11]

console.log(arrRemoved3); 

# //[7]

#9##indexOf() lastIndexOf()#indexOf()

:接收兩個參數:要尋找的項目和(可選的)表示查找起點位置的索引。其中,從陣列的開頭(位置 0)開始向後尋找。  lastIndexOf:接收兩個參數:要尋找的項目和(可選的)表示尋找起點位置的索引。其中,
從陣列的結尾開始向前找到。 這兩個方法都會傳回要尋找的項目在陣列中的位置,或是在找不到的情況下傳回

-#1 。在比較第一個參數與陣列中的每一項時,會使用全等運算子。

1

10forEach()

forEach()## :對數組進行遍歷循環,對數組中的每一項運行給定函數。這個方法沒有回傳值。參數都是function類型,預設有傳參,參數分別為:遍歷的陣列內容;第對應的陣列索引,陣列本身。

#2

3

4

5

6

var

arr = [1,3,5,7,7,5,3,1];#console.log(arr.indexOf(5)); 

//2console.log(arr.lastIndexOf(5)); 

//5console.log(arr.indexOf(5,2)); 

//2 #console.log(arr.lastIndexOf(5,4)); 

#//2console.log(arr.indexOf(

"5")); //-1

1

#2

3

4

5

6

7

8

9

10

#var arr = [1, 2, 3, 4, 5];

arr .forEach(function(x, index, a){

console.log(x + '|' + index + '|' + (a === arr));

});

// 輸出為:

// 1|0|true

// 2|1|true

// 3|2|true

// 4|3|true

// 5|4|true

11map()

map():指# “映射,對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組。

下面程式碼利用map方法實作陣列中每個數字求平方。

#

12filter()

filter()過濾功能,陣列中的每一項運行給定函數,傳回滿足過濾條件組成的陣列。

1

#2

3

4

5

var arr = [1, 2, 3, 4, 5];

#var arr2 = arr .map(function(item){

##return# #it​​em*item;});

#console.log(arr2); 

//[1, 4, 9, 16, 25]

1

#2

3

4

5

var arr = [1, 2, 3, 4, 5, 6,  7, 8, 9, 10];

var arr2 = arr.filter(function(x, index) {

x < 10;

#return

index % 3 === 0 || x >=  8;

});

console.log(arr2); 

//[1, 4, 7, 8, 9, 10]

#13

every()

every()
:判斷數組中每一項都是否滿足條件,只有所有項都滿足條件,才會回傳

true

1#2 3

45

6

7

8

9 var

arr = [1, 2, 3, 4, 5];

var

arr2 = arr.every(

function

(x) {

##return
#########});#############console.log(arr2); ######// true###############var###### ###arr3 = arr.every(#########function######## #(x) {###############return###### ###x < 3;###########}); ############console.log(arr3); ######// false##################

14#some()

some() :判斷數組中是否存在滿足條件的項,只要有一個滿足條件,就會傳回true

15reduce()#和# reduceRight()

這兩個方法都會實作迭代數組的所有項,然後建立一個最終返回的值。 reduce()方法從陣列的第一項開始,逐一遍歷到最後。而 reduceRight()則從陣列的最後一項開始,向前遍歷到第一項。

這兩個方法都會接收兩個參數:一個在每一項上呼叫的函數和(可選的)作為歸併基礎的初始值。

傳給 reduce() reduceRight()的函數接收 4 個參數:前一個值、目前值、項目的索引和陣列物件。這個函數傳回的任何值都會作為第一個參數自動傳給下一項。第一次迭代發生在數組的第二項上,因此第一個參數是數組的第一項,第二個參數就是數組的第二項。

下面程式碼用reduce()實作陣列求和,陣列一開始加了一個初始值##10

1

#2

3

4

5

6

7

8

9

var arr = [1, 2, 3, 4, 5];

var arr2 = arr.some(function(x) {

##return x < 3;

});

#console.log(arr2); // true

var arr3 = arr.some(function(x) {

return x < 1;

##});

console.log(arr3); 

// false

1

#2

3

4

5

var values = [1,2,3,4,5];

var##sum = values .reduceRight(function(prev, cur, index, array){

return prev + cur;

},10);

console.log(sum); 

//25

#本文轉載自 http://www.jb51. net/article/87930.htm

相關推薦:##JS陣列排序

##js函數封裝


 


#

以上是js數組方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板