1. 程式人生 > >Javascript之數組

Javascript之數組

pow tab nsh 循環 字符 第一個 方式 reverse ast

一、概念

  數組是值的有序集合。每個值叫做一個元素,兒每個元素值數組中有一個位置,以數字表示,稱為索引。數組的元素可以是任意類型,並且同一個數組中的不同元素也可能有不同的類型。

二、創建數組

  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之數組