JavaScript中的Array物件
本文是我在CSDN中的第一篇部落格,主要是在學習過程中,很多知識容易忘記,希望能通過以寫部落格的方式幫助自己記憶,同時也希望能幫助到其他需要的人。本文是從JavaScript高階程式設計一書中整理而來。
1 建立Array物件
Array物件指的是陣列物件,建立Array的方式有很多種。如:
//建立一個空的陣列
var arr1=new Array();
//建立一個容量大小為10的陣列,即length屬性值為10
var arr2=new Array(10);
//建立一個陣列物件,裡面包含3個字串陣列
var arr3=new Array("red","green","blue");
可以看到,建立陣列物件時,可以指定初始容量,還可以指定初始元素內容。但是有一點需要注意:
當給
Array
傳遞一個引數時,如果是數值,則表示容量;其他則表示初始元素內容。
另外,值得注意的是:關鍵字new
可以省略。
var colors=Array(3);//建立一個包含3項的陣列
var names=Array("Greg");//建立一個包含項,即“Greg”的陣列
除此之外,我們還可以通過中括號的方式建立陣列物件。
var colors=["red","green","blue"];//建立一個包含3個字串的陣列
var names=[];//建立一個空陣列
以中括號方式建立時,元素之間用逗號隔開,但是要注意:
不要在最後一個元素的後面多加一個逗號,這可能會帶來問題。
如:
var values=[1,2,];//這樣可能會建立一個包含2項或3項的陣列
2 陣列的訪問
2.1 索引訪問
陣列的訪問比較簡單,直接通過下標索引的方式即可訪問,如:arr[8]
即為訪問陣列物件arr
的下標為8
的元素。
陣列物件有個常用的屬性:
length
。表示陣列包含的元素個數。
2.2 元素查詢
當要查詢某個元素在陣列中的位置時,可以通過indexOf()
和lastIndexOf()
方法:
var numbers=[1,2,3,4,5,4,3,2,1];
alert(numbers.indexOf(4));//3
alert(numbers.lastIndexOf(4));//5
indexOf()
即從頭向尾搜尋,lastIndexOf()
從尾向頭搜尋。檔沒有找到指定的元素時,返回-1
。也可以指定搜尋的起始位置,通過傳入2個引數:第一個參數列示要搜尋的元素,第二個參數列示搜尋的起始位置:
alert(numbers.indexOf(4,4));//5
alert(numbers.lastIndexOf(4,4));//3
2.3 迭代方法
迭代方法主要包含如下5個:
every()
filter()
forEach()
map()
some()
他們的使用以及區別如下程式碼所示:
var numbers=[1,2,3,4,5,4,3,2,1];
/**
* 當所有的元素執行指定的函式的返回都為true時,every函式返回true
*/
var everyResult=numbers.every(function(item,index,array){
return item>2;
});
alert(everyResult);//false
/**
* 只要有一個元素執行指定的函式的返回都為true時,some函式返回true
*/
var someResult=numbers.some(function(item,index,array){
return item>2;
});
alert(someResult);//true
/**
* 返回子陣列,子陣列裡面的元素滿足指定函式的條件(即當執行該元素時,返回true)
*/
var filterResult=numbers.filter(function(item,index,array){
return item>2;
});
alert(filterResult);//[3,4,5,4,3]
/**
* 返回一個陣列,該陣列的元素為對應原陣列的元素執行指定函式後的返回值
*/
var mapResult=numbers.map(function(item,index,array){
return item*2;
});
alert(mapResult);//[2,4,6,8,10,8,6,4,2]
/**
* forEach相當於for(i=0;i<numbers.length;i++)
*/
numbers.forEach(function(item,index,array){
//針對遍歷,執行指定操作
});
3 棧和佇列
JavaScript中,可以通過Array物件模擬棧和佇列操作。
3.1 棧
棧的操作無非就是壓棧和出棧,Array
物件分別對應pop()
和push()
兩個函式。
var colors=new Array();
//push函式可以連續壓多個元素,返回結果是當前棧的元素個數
var count=colors.push("red","green");
alert(count);//2
//pop彈出棧頂元素
var item=colors.pop();
alert(item);//green
從具體實現得角度來說,push函式對應於在陣列尾部新增元素,pop對應從陣列尾部刪除元素並把這個元素返回。
3.2 佇列
對於佇列,Array
提供了一個函式shift()
,主要作用為刪除陣列首部第一個元素並返回該元素。因此,我們可以通過shift()
和push()
函式結合,模擬佇列的出隊和入隊過程。
另外,還有一個函式unshift()
其作用與shift()
恰好相反。用於在陣列的首部插入元素。因此,其實我們也可以通過組合pop()
和unshift()
兩個函式模擬佇列的出隊和入隊的過程。
4 排序
Array
物件有個sort()
函式,用於實現陣列元素的排序。如:
var values=[0,1,5,10,15];
values.sort();
alert(values);//0,1,10,15,5
從註釋中可以看到,排序結果並沒有按照數字大小排序。其實,主要原因為:
預設情況下,sort()方法按升序排列元素,而Array允許裡面的元素不同,即允許裡面的元素中字串、數字、物件等同時存在,為了實現排序,sort()函式會呼叫每個陣列項的toString()方法,然後比較字串以確定如何排序。因此,即使裡面全是數值,最終還是會以字串的順序排序。
我們可以指定比較器,通過比較器來比較兩個元素哪個大哪個小!!!
function compare(value1,value2){
return value1-value2;
}
var values=[0,1,5,10,15];
values.sort(compare);//指定比較器
alert(values);//0,1,5,10,15
在比較器函式中,如果第一個引數比第二個函式小,返回負數,如果相等返回0,如果第二個數比第一個數小,返回正數。
Array物件中還有個reverse()函式,用於逆轉陣列,即1,2,3,4,5變成5,4,3,2,1
5 其他函式
5.1 判斷某個物件是否是Array物件
可以通過instanceof操作符
if(obj instanceof Array){
//
}
也可以通過Array.isArray(obj)
來判斷。
5.2 Array轉字串
簡單的轉換如下幾種方法:
var colors=["red","blue","green"];
alert(colors.toString());//red,blue,green
alert(colors.valueOf());//red,blue,green
alert(colors);//red,blue,green
如果希望在轉為字串時,指定連線符,則如下:
var colors=["red","blue","green"];
alert(colors.join(","));//red,blue,green
alert(colors.join("||"));//red||,blue||green
5.3 concat方法
concat方法為基於當前陣列中所有項建立一個新陣列。
var colors=["red","blue","green"];
var colors2=["yello",["black","brown"]];
alert(colors);//red,blue,green
alert(colors2);//red,blue,green,yello,black,brown
5.4 slice方法
slice方法是基於當前陣列中的一個或多個項建立一個新陣列。
var colors=["red","green","blue","yellow","purple"];
var colors2=colors.slice(1);
var colors3=colors.slice(1,4);
alert(colors2);//green,blue,yellow,purple
alert(colors3);//green,blue,yellow
alert(colors4);//
alert(colors5);//
slice函式還有其他功能,如:
//從位置2開始插入字串"red","green"
colors.slice(2,0,"red","green");
//刪除當前位置2的項,然後再從位置2開始插入字串"red","green"
colors.slice(2,1,"red","green");
相關文章
- JavaScript Array物件JavaScript物件
- JavaScript Array 物件JavaScript物件
- Array中物件的排序物件排序
- JavaScript中ArrayJavaScript
- javascript中Array的操作JavaScript
- JavaScript 複習之 Array 物件JavaScript物件
- 淺談Array --JavaScript內建物件JavaScript物件
- javaScript中的Array型別JavaScript型別
- JavaScript 基礎(二) – 建立 function 物件的方法, String物件, Array物件JavaScriptFunction物件
- JavaScript 特殊物件 Array-Like Objects 詳解JavaScript物件Object
- Array物件物件
- JavaScript物件導向程式設計——Array型別JavaScript物件程式設計型別
- 淺談 JavaScript 中 Array 型別的方法使用JavaScript型別
- JavaScript 中的陣列分組:array.groupBy()JavaScript陣列
- JavaScript中物件的拷貝JavaScript物件
- javascript-ArrayJavaScript
- [譯] Javascript 中 Array.push 要比 Array.concat 快 945 倍!??JavaScript
- 深入瞭解JavaScript中的物件JavaScript物件
- Javascript中的陣列物件排序JavaScript陣列物件排序
- JavaScript 中物件的深拷貝JavaScript物件
- JavaScript中的物件導向----類JavaScript物件
- 詳解Javascript中的Object物件JavaScriptObject物件
- JavaScript Array map() 方法JavaScript
- JavaScript Array 陣列JavaScript陣列
- JavaScript Array常用方法JavaScript
- JavaScript中判斷物件是否屬於Array型別的4種方法及其背後的原理與侷限性JavaScript物件型別
- 【JavaScript框架封裝】使用Prototype給Array,String,Function物件的方法擴充JavaScript框架封裝Function物件
- [js物件]JS入門之Array物件JS物件
- JavaScript中Array方法你該知道的正確開啟方法JavaScript
- 對JavaScript中函式物件的理解JavaScript函式物件
- 聊一聊Javascript中的Promise物件JavaScriptPromise物件
- 瞭解 JavaScript 中的內建物件JavaScript物件
- JavaScript 中的 Range 和 Selection 物件JavaScript物件
- JavaScript中陣列Array.sort()排序方法詳解JavaScript陣列排序
- javascript Array.from()方法JavaScript
- JavaScript之陣列ArrayJavaScript陣列
- JavaScript中 Map 物件詳解JavaScript物件
- 在 JavaScript 中如何克隆物件?JavaScript物件