Javascript之數組
一、概念
數組是值的有序集合。每個值叫做一個元素,兒每個元素值數組中有一個位置,以數字表示,稱為索引。數組的元素可以是任意類型,並且同一個數組中的不同元素也可能有不同的類型。
二、創建數組
1、常規方式:
var arr = new Array(); arr[0] = ‘abc‘; arr[1] = ‘123‘; arr[2] = ‘asd‘; console.log(arr); //打印得:Array [ "abc", "123", "asd" ]
2、簡介方式
var arr = new Array(‘asd‘, ‘123‘, ‘Hello‘); console.log(arr);//打印得: Array [ "asd", "123", "Hello" ]
3、字面方式
1 var arr = ["Saab", "Volvo", "BMW"]; 2 console.log(arr);//打印得:Array [ "Saab", "Volvo", "BMW" ]
三、數組的讀寫
1 var arr = new Array(10, 20, ‘Word‘); 2 arr[3] = ‘Hello‘; //寫第3個元素 3 console.log(arr); //Array [ 10, 20, "Word", "Hello" ] 4 var val = arr[1]; //讀第一個元素 5 console.log(val); //20
四、數組的長度
var arr = new Array(‘asd‘, ‘123‘, ‘Hello‘); var len = arr.length; console.log(len); //3
五、數組元素的添加和刪除
最簡單的方法:為新索引值賦值
1 var arr = [];//定義一個空數組 2 arr[0] = ‘zero‘; //添加元素 3 arr[1] = ‘one‘; 4 console.log(arr); //Array [ "zero", "one" ]
也可以使用push()方法在數組末尾增加一個或多個元素
1 var arr = [];//定義一個空數組 2 arr.push(‘zero‘); //增加一個 3 arr.push(‘one‘, ‘two‘); //增加多個 4 console.log(arr); //Array [ "zero", "one", "two" ]
delete元素符刪除數組元素:
1 var arr = [ "zero", "one", "two" ]; 2 delete arr[1]; //a在索引1的位置不再有元素 3 console.log(arr); //Array [ "zero", <1 個空的存儲位置>, "two" ] 4 var bool = 1 in arr; 5 console.log(bool); //false 說明數組索引1並未在數組中定義 6 console.log(arr.length); //3 delete操作不影響數組的長度
pop()方法刪除數組尾部的元素,並使數組長度減1,同時返回被刪除的元素:
1 var arr = [ "zero", "one", "two" ]; 2 var val = arr.pop(); 3 console.log(arr); //Array [ "zero", "one" ] 4 console.log(arr.length); //2 5 console.log(val); //‘two‘
六、數組的遍歷
for循環是遍歷數組元素最常見的方法:
1 var arr = [ "zero", "one", "two", "three"]; 2 for (var i = 0; i < arr.length; i++) { 3 console.log(arr[i]); //打印得:zero one two three 4 };
for/in循環遍歷數組:
1 var arr = [ "zero", "one", "two", "three"]; 2 for (var index in arr) { 3 var val = arr[index]; 4 console.log(val);////打印得:zero one two three 5 };
還可以用forEach()方法遍歷:
var data = [1, 2, 3, 4, 5]; var sumOfSquares = 0; data.forEach(function(x){ sumOfSquares += x * x;//平方相加 }); console.log(sumOfSquares); //55
七、多維數組
1 /** 2 * 創建一個多維數組 3 * @type {Array} 4 */ 5 var table = new Array(10); //表格有10行 6 for (var i = 0; i < table.length; i++) { 7 table[i] = new Array(10); //每行有10列 8 }; 9 //初始化數組 10 for (var i = 0; i < table.length; i++) { 11 for (var j = 0; j < table[i].length; j++) { 12 table[i][j] = i * j; 13 }; 14 }; 15 //使用多維數組計算 5 * 7 16 var product = table[5][7]; 17 console.log(product); //35
八、數組方法
數組常用的方法:
concat()用於連接兩個或多個數組:
1 var arr1 = ["Cecilie", "Lone"]; 2 var arr2 = ["Emil", "Tobias", "Linus"]; 3 var arr3 = ["Robin"]; 4 var newArr = arr1.concat(arr2, arr3); 5 console.log(newArr); //Array [ "Cecilie", "Lone", "Emil", "Tobias", "Linus", "Robin" ]
join把數組的所有元素轉化成一個字符串:
1 var arr = [ "Cecilie", "Lone", "Emil", "Tobias", "Linus", "Robin" ]; 2 var str = arr.join(‘,‘); 3 console.log(str);//Cecilie,Lone,Emil,Tobias,Linus,Robin 4 console.log(typeof(str));//string
reverse()反轉元素的順序,返回新的數組:
1 var arr = [ "Cecilie", "Lone", "Emil", "Tobias", "Linus", "Robin" ]; 2 var newArr = arr.reverse(); 3 console.log(newArr);//Array [ "Robin", "Linus", "Tobias", "Emil", "Lone", "Cecilie" ]
sort()對數組元素排序,排序順序可以是字母或數字,並按升序或降序。默認排序順序為按字母升序。
1 //數字排序 2 var arr = [40,100,1,5,25,10]; 3 var newArr = arr.sort(function(a,b){return a-b}); 4 console.log(newArr); //Array [ 1, 5, 10, 25, 40, 100 ]
slice()選取數組的的一部分,並返回一個新數組。
1 var arr = ["Banana", "Orange", "Lemon", "Apple", "Mango"]; 2 var newArr = arr.slice(2,4); 3 console.log(newArr); //Array [ "Lemon", "Apple" ]
splice()從數組中添加或刪除元素。不同於slice()和concat(),splice()會修改調用的數組
1 var arr = ["Banana", "Orange", "Apple", "Mango"]; 2 var newArr = arr.splice(2,1,"Lemon","Kiwi"); 3 console.log(newArr);//移除數組的第三個元素,並在數組第三個位置添加新元素,同時返回刪除的元素 4 console.log(arr);//Array [ "Banana", "Orange", "Lemon", "Kiwi", "Mango" ]
splice()會插入數組本身而非數組的元素。
push()和pop()已在數組元素的添加修改提到。
unshift()和shift()的行為非常類似與push()和pop(),前者是在數組的頭部進行元素的插入和刪除操作,unshift()在數組的頭部插入一個或多個元素,返回數組新的長度;shift()刪除數組的第一個元素並將其返回。
1 var arr = ["Banana", "Orange", "Apple", "Mango"]; 2 var len = arr.unshift("Lemon","Pineapple"); 3 console.log(len);//6 4 console.log(arr);//Array [ "Lemon", "Pineapple", "Banana", "Orange", "Apple", "Mango" ]
1 var arr = ["Banana", "Orange", "Apple", "Mango"]; 2 var val = arr.shift(); 3 console.log(val);//Banana 4 console.log(arr);//Array [ "Orange", "Apple", "Mango"
toString()將數組轉換為字符串
1 var arr = ["Banana", "Orange", "Apple", "Mango"]; 2 var str = arr.toString(); 3 console.log(str);//Banana,Orange,Apple,Mango
這裏與不使用任何參數調用的join()方法返回的字符串是一樣的。
forEach()從頭到尾遍歷數組,為每個元素調用指定的元素。
1 var data = [1, 2, 3, 4, 5]; 2 var sum = 0; 3 data.forEach(function(val){ 4 sum += val; //計算數組元素和 5 }); 6 console.log(sum);//15 7 data.forEach(function(v, i, a){ 8 a[i] = v + 1;//給數組的每個元素加1 9 }) 10 console.log(data);//Array [ 2, 3, 4, 5, 6 ]
map()方法將調用的數組的每個元素傳遞給指定的函數,並返回一個數組,它包含該函數的返回值。
1 var arr = [1, 2, 3]; 2 var newArr = arr.map(function(x) { 3 return x * x; 4 }) 5 console.log(newArr);//Array [ 1, 4, 9 ]
filter()方法返回的數組元素是調用的數組的一個子集。
1 var arr = [1, 2, 3, 4, 5, 6 ]; 2 var newArr = arr.filter(function(x){ 3 return x < 3; 4 }); 5 console.log(newArr); // Array [ 1, 2 ] 6 var arr1 = arr.filter(function(x, i){ 7 return i % 2 == 0; 8 }) 9 console.log(arr1);//Array [ 1, 3, 5 ]
壓縮空缺並刪除undefined和null元素
arr = arr.filter(function(x){ return x !== undefined && x !== null;})
every()和some()方法是數組的邏輯判定,對數組元素應用指定函數進行判定,返回true或false
every() 所有的元素滿足條件,返回true,否則返回false。
var arr = [1, 2, 3, 4, 5, 6 ]; var bool = arr.every(function(x){ return x < 10; });//true 所有的值都小於10 console.log(bool);
some()至少有一個元素滿足條件,返回true, 所有的不滿足返回false
var arr = [1, 2, 3, 4, 5, 6 ]; var bool = arr.some(function(x){ return x % 2 == 0});//true arr含有偶數 console.log(bool);
reduce()和reduceRight()方法使用指定函數將數組元素進行組合,生成單個值。
reduced()將數組元素計算為一個值(從左到右)。
1 var arr = [1, 2, 3, 4, 5, 6 ]; 2 var sum = arr.reduce(function(x, y){return x + y}, 0);//數組求和 3 var product = arr.reduce(function(x, y){ return x * y}, 1);//數組求積 4 var max = arr.reduce(function(x, y){ return (x > y) ? x : y}); //求最大值 console.log(sum); 5 console.log(product); 6 console.log(max);
reducedRight()按照數組索引從高到低處理數組。
var arr = [2, 3, 4]; var big = arr.reduceRight(function(x, y){ return Math.pow(y, x);}); console.log(big);//2.4178516392292583e+24
indexOf()和lastIndexOf()方法搜索整個數組中具有給定值的元素,返回找到的第一個元素的索引或者如果沒有找到返回-1,indexOf()從頭到尾搜索,lastIndexOf()則反向搜索。
1 var arr = [0, 1, 3, 1, 2, 0]; 2 var a = arr.indexOf(1); //a[1]是1 3 var b = arr.lastIndexOf(1);//a[3]是1 4 var c = arr.indexOf(5);//沒有值為5的元素 5 console.log(a); 6 console.log(b); 7 console.log(c);
Javascript之數組