JavaScript基礎-----數組(Array)
1.JavaScript 中創建數組的方法:
(1).使用Array構造函數:
var arr = new Array(); //創建一個空數組 var arr = new Array(5); //傳遞一個整數時,表示創建了一個長度為 5 的數組,如果傳遞一個字符串,則表示創建了包含這個字符串的數組 var arr = new Array(5,"abc",20) //傳遞多個元素時,表示創建了包含這些個元素的數組,有多少元素,長度就為多少
(2).使用數組字面量:
var arr = [] //創建一個空數組 var arr = [,,,,,] //只傳遞逗號時,表示數組的長度,傳遞幾個逗號,長度為幾var arr = ["abc",2,"123"] //創建一個包含這些元素的數組
2.數組的一些屬性和方法:
(1) length:表示數組中元素的數量
var arr = [1,"456","abc"] console,log(arr.length) //輸出3(元素的數量)
(2) prototype:向數組添加屬性或方法,添加之後,所有創建出來的數組對象都會有此屬性或方法(prototype是個全局屬性,不僅可以向數組(數組本身就是對象)添加屬性或方法,可以向任何對象添加),示例:
//將創建的數組的值都轉換為大寫字母 Array.prototype.Cap = function(){ for(var i = 0;i < this.length;i ++){ this[i] = this[i].toUpperCase(); } } //創建一個數組,調用Cap()方法 var arr = ["ssdj","df","dsf","s"]; arr.Cap(); //在控制臺查看結果 console.log(arr) //輸出["SSDJ", "DF", "DSF", "S"]
(3) push():向數組的末尾添加一個或多個元素,並返回新的長度
var arr = [1,"2","abc"]; arr.push("456"); console.log(arr)//輸出[1,"2","abc","456"]
(4) unshift():向數組的開頭添加一個或多個元素,並返回新的長度
var arr = [1,"2","abc"]; arr.unshift("你好"); console.log(arr) //輸出["你好",1,"2","abc"]
(5) pop():刪除數組的最後一個元素
var arr = [1,"2","abc"]; arr.pop(); console.log(arr) //輸出[1,"2"]
(6) shift():刪除數組的第一個元素
var arr = [1,"2","abc"]; arr.shift(); console.log(arr) //輸出["2","abc"] //當數組為空的時候,則返回undefined
(7) *join():把數組的所有元素組成一個字符串,包括數組中的逗號,而join()中傳遞的參數,就相當於將數組中的逗號換成那個參數
var arr = ["a","b",2,"f"]; console.log(arr.join()) //輸出字符串"a,b,2,f" //當傳遞參數時 console.log(arr.join("-")) //輸出"a-b-2-f"
使用join()實現字符串的重復:
function fun(str,n){ return new Array(n + 1).join(str); } console.log(fun("你好",3)) //輸出"你好你好你好" //這裏的n就相當於數組中的逗號,new Array(4)就等同於[,,,]
(8) *sort():對數組的元素進行從小到大排序,但是sort()都會將數組中元素轉換成字符串再進行比較,包括數值,所以就會出現以下情況:
var arr = [12,5,43,252,3]; arr.sort(); console.log(arr) //輸出[12, 252, 3, 43, 5]
解決以上出現的情況,可以創建一個比較函數,然後用sort()調用那個函數
//比較函數可傳遞兩個參數,如果num1位於num2之前,返回一個負數;相等則返回0;num1位於num2之後,返回一個正數 function fun(num1,num2){ if(num1 < num2){ return -1; }else if(num1 > num2){ return 1; }else{ return 0; } } var arr = [12,5,43,252,3]; console.log(arr.sort(fun)) //輸出[3, 5, 12, 43, 252] //如果需要進行降序,只需交換一下return的值即可
(9) reverse():反轉數組中元素的順序
var arr = ["a","b",2,"f"] arr.reverse(); console.log(arr) //輸出["f", 2, "b", "a"]
(10) concat():創建一個原數組的副本,並可以添加參數,參數會添加到副本的末尾,且原數組不會有任何改變
var arr = ["a","b",2,"f"] var arrCopy = arr.concat() console.log(arrCopy) //輸出["a","b",2,"f"],相當於復制了原數組 var arrCopy1 = arr.concat("你好","haha") console.log(arrCopy1) //輸出["a","b",2,"f","你好","haha"] console,log(arr) //輸出原數組,沒有發生改變
(11) *slice():截取,創建一個原數組的副本,可添加參數,參數需為數字,數字表示下標,表示從一個數字的下標開始到另一個數字的下標結束(註:不包括結束的下標)
var arr = ["a","b",2,"f","ha"] // 0 1 2 3 4 //傳遞一個參數1,表示從1開始截取(包括1) var arrCopy = arr.slice(1) console.log(arrCopy) //輸出["b", 2, "f","ha"] //傳遞兩個參數,表示從1開始截取到4結束(包括1,但不包括4) var arrCopy1 = arr.slice(1,4) console.log(arrCopy1) //輸出["b", 2, "f"] //當傳遞的參數為負數時,將負數加上數組的長度length的值來替換該位置的數 var arrCopy2 = arr.slice(1,-1) console.log(arrCopy2) //輸出["b", 2, "f"] //該數組length值為5,-1+5=4,所以依然是從1開始截取到4結束(不包括4)
(12) *splice():這是個很重要的數組方法,可以向數組中添加,替換或刪除元素
刪除:可以刪除任意數量的元素,指定 2 個參數:(指定的位置,要刪除的元素的個數),如果沒有第二個參數時,則指定位置後所有元素都會被刪除
var arr = [1,3,5,7,9,11]; var arrCopy = arr.splice(1,2) ; //從1位置開始刪除2個元素 console.log(arr) //輸出[1, 7, 9, 11]
插入:可以向指定位置插入任意數量的元素,指定 3 個參數:(指定的位置,要刪除的元素的個數,要添加的元素)
var arr = [1,3,5,7,9,11]; var arrCopy = arr.splice(1,2,4,"6") ; //從1位置開始刪除2個元素,添加4和"6" console.log(arr) //輸出[1, 4, "6", 7, 9, 11]
(13) indexOf() 和 lastIndexOf():
indexOf:從數組的首字符開始查找數組中元素所在的位置,指定 2 個參數:(要查找的元素,從什麽位置開始查找(可選))
var arr1 = [1,3,5,11,7,9,11]; console.log(arr1.indexOf(11)) //輸出位置3 console.log(arr1.indexOf(11,4)) //輸出位置6,是從第4位置開始檢索查找
lastIndexOf:從數組的末尾字符開始查找數組中元素所在的位置,指定的參數同indexOf一樣:(要查找的元素,從什麽位置開始查找(可選))
var arr1 = [1,3,5,11,7,9,11]; console.log(arr1.lastIndexOf(11)) //輸出位置6
(14) map():通過指定函數處理數組的每個元素,最後以數組的形式返回出來
//求下列數組中元素的平方 var arr = [1,2,3,4,5] var arr2 = arr.map(function(num){ return num*num; }); console.log(arr2) //輸出[1, 4, 9, 16, 25]
(15) every():判斷數組中每個元素都是否滿足給定的條件,且只有所有元素都滿足條件時,才會返回true
var arr = [1,2,3,4,5]; var arr3 = arr.every(function(x){ return x < 8; }) console.log(arr3) //輸出true //當有任意一個元素不滿足條件時,返回false
(16) filter():“過濾”功能,通過指定函數處理數組的每個元素,最後返回滿足過濾條件的數組
//查找下列數組中大於15的元素 var arr = [11,22,13,24,15]; var arr4 = arr.filter(function(x){ return x > 15; }) console.log(arr4) //輸出[22, 24]
3.類數組(偽數組):
定義:類數組本質是一個對象,但是可以利用對象和數據的特性,模擬成數組,且必須要含有length屬性,示例:
var obj = { 0 : "a", 1 : "b", 2 : 8, 3 : "c", length : 4, push : Array.prototype.push, //這個類數組就有了push這個方法 } obj.push("d") //在數組的末尾添加一個"d" console.log(obj.length) //此時輸出的length為5,表示添加成功
類數組轉換為數組,以上面代碼為例:
var obj1 = Array.prototype.slice.call(obj) console.log(obj1) //輸出數組["a", "b", 8, "c"]
*下面是一道關於類數組的面試題:
var obj = { "2" : "a", "3" : "b", "length" : 2, "push" : Array.prototype.push } obj.push("c"); obj.push("d"); // 問最後這個console.log(obj)輸出的是什麽? // 解答: // "2" : "a", --> 等同於 "0" : "a" // "3" : "b" --> 等同於 "1" : "b" // push("c") --> 等同於 "2" : "c" // push("d") --> 等同於 "3" : "d" // 所以最後添加上去的"c"和"d"會將之前的"a"和"b"的值覆蓋,length的值為4
JavaScript基礎-----數組(Array)