1. 程式人生 > >JavaScript基礎-----數組(Array)

JavaScript基礎-----數組(Array)

利用 復制 是什麽 unshift 都是 改變 PE per ast

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)