數組創建
- var a = new Array()
- var b = new Array( 10 )
- var c = new Array( “one”, “two”, “three” )
- var d = [ 1, 2, 3, 4, 5 ]
- var e = [ [ 1,2 ], [ 3, 4 ] ] // 二維數組
關於Array()
new Array()創建的數組,在for循環中length應用有些問題,如下代碼。
var arr = new Array( 10 )
// 不能用 arr.length 作爲for循環判斷條件。瀏覽器會崩潰。
for ( var i = 0; i < arr.length; i ++ ) {
arr[i] = i
}
console.log(arr)
一個細節:
var arr = new Array( 2 )
arr[0] = 0
arr[1] = 1
console.log( arr ) // Array [ 0, 1 ]
console.log( arr.length ) // 2
var arr = new Array( 2 )
arr.push( 0 )
arr.push( 1 )
console.log( arr ) // Array [ <2 個空的存儲位置>, 0, 1 ]
console.log( arr.length ) // 4
注意:兩個輸出結果,是不相同的,原因是當你在Array()括號內輸入2後,系統自動會給它分配兩個空間。而push是在數組結尾插入元素,相當於arr[0],arr[1]分配了空間但是沒有元素,是兩個空元素,所以第二種結果不同於第一種。
引用別人的話: Array只有一個屬性,就是length,length表示的是數組所佔內存空間的數目,而不僅僅是數組中元素的個數。
var arr = new Array ( "one", "two", "three" )
arr[5] = "five"
console.log( arr ) // Array [ " one ", " two", " three", <2 個空的存儲位置>, "five" ]
console.log( arr.length ) // 6
Array的length
var arr = new Array ( "one" , "two" , "three" )
delete arr[1]
console.log( arr.length )
console.log( arr ) // Array [ "one", <1 個空的存儲位置>, "three" ]
//顯示的結果是3,說明即使刪除也無法改變數組的長度
var arr = new Array ( "one" , "two" , "three" )
arr.length = 1
console.log( arr.length ) // 1
console.log( arr ) // Array [ "one" ]
數組的操作方法
一、添加元素
1、 push() 在數組末尾添加一個或多個元素。
(1) push() 方法直接修改 arrayObject,而不是創建一個新的數組。push() 方法和 pop() 方法使用數組提供的先進後出棧的功能。
(2) 該方法會改變數組的長度。
var arr = [ 1, 3, 5, 6 ]
arr.push( "a", "b", "c" )
console.log( arr.push( 7 ) ) //8
//push()方法返回的是新的數組的長度。
console.log( arr ) // Array [ 1, 3, 5, 6, "a", "b", "c", 7 ]
2、unshift() 在數組前端添加一個或多個元素。
(1) unshift() 方法不創建新的創建,而是直接修改原有的數組。
(2) 該方法會改變數組的長度。
var arr = [ 1, 3, 5, 6 ]
arr.unshift( "a", "b", "c" )
console.log( arr.unshift( 7 ) // 8
// unshift()方法返回的是新的數組的長度。
console.log( arr ) // Array [ 7, "a", "b", "c", 1, 3, 5, 6 ]
3、splice( index, howmany, items ) 添加/刪除元素,然後返回被刪除的項目。index數組索引,爲負值時從數據結尾添加;howmany刪除的個數(刪除從數據結尾開始,先添加後刪除),0代表不刪除;items要添加的元素(可選)。
(1) 該方法會改變原始數組。
(2) splice() 方法與 slice() 方法的作用是不同的,splice() 方法會直接對數組進行修改。
var arr = [ 1, 3, 5, 6 ]
arr.splice( 1, 1, "a", "b", "c" )
console.log( arr ) // Array [ 1, "a", "b", "c", 5, 6 ]
// arr.splice( 1, 2 )
// console.log( arr ) // Array [ 1, 6 ]
// arr.splice( 1, 0, "a", "b", "c" )
// console.log( arr ) // Array [ 1, "a", "b", "c", 3, 5, 6 ]
二、刪除元素
1、 pop() 方法用於刪除並返回數組的最後一個元素。
var arr = [ 1, 3, 5, 6 ]
console.log( arr.pop() ) // 6
console.log( arr ) // Array [ 1, 3, 5 ]
2、shift() 方法用於把數組的第一個元素從其中刪除,並返回第一個元素的值。
如果數組是空的,那麼 shift() 方法將不進行任何操作,返回 undefined 值。請注意,該方法不創建新數組,而是直接修改原有的 arrayObject。
var arr = [ 1, 3, 5, 6 ]
console.log( arr.shift() ) // 1
console.log( arr ) // Array [ 3, 5, 6 ]
3、splice() 如上。
三、連接數組
1、arr.concat( arr1 )
var arr = new Array( 3 )
arr[ 0 ] = 0
arr[ 1 ] = 1
arr[ 2 ] = 2
var arr2 = new Array( 3 )
arr2[ 0 ] = 3
arr2[ 1 ] = 4
arr2[ 2 ] = 5
console.log( arr.concat( arr2 ) ) //Array [ 0, 1, 2, 3, 4, 5 ]
var arr = [ 1, 2, 3, 4, 5 ]
var arr2 = [ "a", "b", "c", "d", "e" ]
var arr3 = [ 7, 8, [ 9, 10 ] ]
console.log( arr.concat( arr2 ) ) //Array [ 1, 2, 3, 4, 5, "a", "b", "c", "d", "e" ]
//不能解析二維數組。
console.log( arr.concat( arr3 ) ) //Array [ 1, 2, 3, 4, 5, 7, 8, Array[2] ]
四、轉化數組
1、toString() 把數組轉換成一個字符串,並返回結果。
var arr = [ 1, 3, 5, 6 ]
console.log( arr.toString() ) //1,3,5,6
2、join( saparator ) 該參數設置分隔符。 用於把數組中的所有元素放入一個字符串。元素是通過指定的分隔符進行分隔的。
var arr = [ 1, 3, 5, 6 ]
console.log( arr.join( "、" ) ) //1、3、5、6
3、 toLocaleString() 把數組轉換成一個字符串。
var arr = [ "a", "b", "c", "d" ]
console.log( arr.toString() ) //a,b,c,d
console.log( arr.toLocaleString() ) //a,b,c,d
4、解析多維。
var arr = new Array ( 1, 2, 3, [ 4, 5, [ 6, 7 ] ] )
var b = arr.toString ()
var arr1 = new Array ( 1, 2, 3, [ 4, 5, [ 6, 7 ] ] )
var d = arr1.toLocaleString ()
//toString()方法和toLocaleString()方法都可以拆解多維數組
console.log( b ) //1,2,3,4,5,6,7
console.log( d ) //1,2,3,4,5,6,7
toString() 方法,toLocaleString()方法的作用類似,firefox下的作用是完全相同的,IE的話如果元素是字符串,會在“,”後 面加上一個空格,如果元素是數字,會擴展到兩位小數,兩者都會改變字符串的length屬性,所以考慮到兼容性,儘量不要使用 toLocaleString()方法。
五、數組排序
1、sort() 方法用於對數組的元素進行排序。arrayObject.sort( sortby ) 該參數:可選,規定排序順序,必須是函數。
對數組的引用,請注意,數組在原數組上進行排序,不生成副本。
注意:
如果調用該方法時沒有使用參數,將按字母順序對數組中的元素進行排序,說得更精確點,是按照字符編碼的順序進行排序。要實現這一點,首先應把數組的元素都轉換成字符串(如有必要),以便進行比較。
如果想按照其他標準進行排序,就需要提供比較函數,該函數要比較兩個值,然後返回一個用於說明這兩個值的相對順序的數字。比較函數應該具有兩個參數 a 和 b,其返回值如下:
若 a 小於 b,在排序後的數組中 a 應該出現在 b 之前,則返回一個小於 0 的值。
若 a 等於 b,則返回 0。
若 a 大於 b,則返回一個大於 0 的值。
var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"
document.write(arr + "<br />")
document.write(arr.sort())
輸出:
10,5,40,25,1000,1
1,10,1000,25,40,5
// 請注意,上面的代碼沒有按照數值的大小對數字進行排序,要實現這一點,就必須使用一個排序函數:
function sortNumber(a,b)
{
return a - b
}
var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"
document.write(arr + "<br />")
document.write(arr.sort(sortNumber))
輸出:
10,5,40,25,1000,1
1,5,10,25,40,1000
六、選擇數組元素
1、slice( start, end ) 方法可從已有的數組中返回選定的元素。
參數說明:
start必需。規定從何處開始選取。如果是負數,那麼它規定從數組尾部開始算起的位置。也就是說,-1 指最後一個元素,-2 指倒數第二個元素,以此類推。
end可選。規定從何處結束選取。該參數是數組片斷結束處的數組下標。如果沒有指定該參數,那麼切分的數組包含從 start 到數組結束的所有元素。如果這個參數是負數,那麼它規定的是從數組尾部開始算起的元素。
請注意,該方法並不會修改數組,而是返回一個子數組。如果想刪除數組中的一段元素,應該使用方法 Array.splice()。
var arr = [ "a", "b", "c", "d" ]
console.log( arr.slice( 1,3 ) )
// 結果是Array [ "b", "c" ] 。以索引的前邊爲準。
var arr6 = [3,5,7,8,0];
var str5 = "hello world";
console.log(str5.slice(1,4)); // ell
console.log(arr6.slice(1,3)); // [5,7]
七、顛倒數組
1、reverse() 方法用於顛倒數組中元素的順序,該方法會改變原來的數組,而不會創建新的數組。
var arr = [ "a", "b", "c", "d" ]
console.log( arr.reverse() ) // Array [ "d", "c", "b", "a" ]
八、清除數組
1、splice()
var arr = [ 1, 2, 3, 4 ];
arr.splice( 0, arr.length );
console.log( arr ); // Array [ ]
2、給length賦值
arr = [ 1, 2, 3, 4 ];
arr.length = 0;
console.log( arr ) //Array [ ]
// 目前 Prototype中數組的 clear 方法和mootools庫中數組的 empty 方法使用這種方式清空數組,保留了數組其它屬性。
3、賦值爲[]
arr = [ 1, 2, 3, 4 ];
arr = []
console.log( arr ) // Array [ ]
// 未保留屬性,效率高於第二種方式。
平臺:firefox 時間:2016.8.19