Javascript引用類型-Array
創建Array數組
var colors = new Array(); //注意大小寫
var colors = new Array(20); //創建長度20的數組
var colors = new Array("red","blue","green");//創建包含3個字符串的數組
var colors = new Array('3'); //包含要給字符的數組(注意和第二項的區別)
var colors = ["red","blue","3"];
var colors = []; //空數組
//最好不要這樣創建
var colors = [1,2,]; //2或3項的數組(根據瀏覽器決定)
var colros = [,,,,,] //5或6項的數組
檢測是否爲數組
//方法一
if(value instanceof Array){}
//方法二
Array.isArray(value);
兩者區別
方法一在多個不同的全局執行環境中會出問題。
數組轉換方法
var colors = ["red","blue","green"];
alert(colors.toString()); //輸出:red,blue,green
alert(colors.valueOf()); //輸出:red,blue,green
alert(colors); //輸出:red,blue,green
棧方法
- 棧特點:LIFO(先進後出)
- 入棧:push()
- 出棧:pop()
var colors = new Array();
var count = colors.push("red","blue");
alert(count); //2
var item = colors.pop();
alert(item); //blue
alert(colors.length) //1
隊方法
- 隊特點:FIFO(先進先出)
- 入隊:unshift()
- 出隊:shift()
var colors = new Array("red","blue","green");
var item = colors.shift();
alert(item); //red
alert(colors.length); //2
重排序方法
- reverse()反轉數組
- sort(function)排序數組,如果不給function參數,則會調用默認的toString()方法,然後根據ASCLL比較大小
function compare(value1,value2){
if(value1 > value2){
return -1; //負數表示第一個參數位於第二參數之前
}else if(value1 < value2){
return 1; //負數表示第一個參數位於第二參數之後
}else{
return 0; //相等就用0表示
}
}
var values = [1,2,3,4];
values.sort(compare);
alert(values); //4,3,2,1
操作方法
深度複製一個數組(創建數組的副本)
var colors = new Array("red","blue","green");
var colors2 = colors.concat("yellow",["1","2"]);
alert(colors); //red,blue,green
alert(colors2);//red,blue,green,yellow,1,2
slice()截取數組
var colors = ["red","blue","green","yellow","purple"];
var colors2 = colors.slice(1);
var colors3 = colors.slice(1,4);
alert(colors2); //blue,green,yellow,purple
alert(colors3); //blue,green,yellow"
splice()增刪查改數組
- 刪除
splice(0,2) 刪除數組前兩項 - 插入
splice(2,0,”red”,”green”) 從當前數組的位置2開始插入字符串 - 替換
splice(2,1,”red”,”green”) 刪除位置2的項,然後開始插入字符串
位置方法
- indexOf()
- lastIndexOf();
迭代方法
every()方法和some()方法
var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.every(function(item,index,array){
return (item > 2);
}); //是否全部大於2,是就放回true,否則false
alert(everyResult) //false
var someResult = numbers.some(function(item,index,array){
return (item > 2);
}); //是存在大於2的數,是就放回true,否則false
alert(someResult) //true
filter()方法
var numbers = [1,2,3,4,5,4,3,2,1];
var filterResult = numbers.filter(function(item,index,array){
return (item > 2);
}); //大於2,就放回item
alert(filterResult) //[3,4,5,4,3]
map()方法
var numbers = [1,2,3,4];
var mapResult = numbers.map(function(item,index,array){
return (item * 2);
}); //每一項都放回item*2
alert(mapResult) //[2,4,6,8]
forEach()方法
var numbers = [1,2,3,4,5,4,3,2,1];
numbers.forEach(function(item,index,array){
//執行某些操作
})
歸併方法
reduce()從第一項開始
var values = [1,2,3,4,5];
var sum = values.reduce(function(prev,cur,index,array){
return prev+cur;
});
alert(sum); //15
- 說明:
prev 表示前一個值(也就是上次執行的返回值prev+cur)
cur 表示當前值(可選,也就是該索引下數組的值)
index 項的索引
array 數組對象
reduceRight()從最後一項開始
//代碼略