一組有序群集,值稱為元素element,位置稱為索引(index,由0開始)
創建Array兩種方式
var ary = [1,2,3]
var ary = new Array(1,2,3)
var ary = new Array(10)
宣告一個長度為10的array索引非連續性的。
var ary= [1,2,,4];
ary.length; //return 4
ary[2]; // return undefined
2 in ary; // return false
// ----
var a= [0,undefined];
a.length; // return 2
a[1]; //return undefined
1 in a; //return true
新增元素
ary.push(5)
ary.unshift(5)
刪除元素 delete ary[2]
var ary=[1,2,3,4,5];
delete ary[2];
2 in ary; // return false
ary.length // return 5, 變成稀疏矩陣
將陣列轉成字串串接寫來,然後回傳此字串。
var a =[1,2,3,4,5];
a.join(); //return "1,2,3,4,5"
a.join("-"); // return "1-2-3-4-5"
將陣列元素反轉。不會創建新的陣列,修改原陣列並回傳。
var a =[1,2,3,4,5];
a.reverse(); // return [5,4,3,2,1]
// a的值為[5,4,3,2,1],並非return一個新的陣列
將陣列排序後回傳,不會創建新陣列。undefined會被排到最後。
var ary =["d","b","c","a"];
ary.sort(); //return ["a","b","c","d"]
// a的值為["a","b","c","d"],,並非return一個新的陣列
var ary= ["B","d","C","a"];
ary.sort() // ary=["B", "C", "a", "d"],不符合排序
// 判斷大小寫
ary.sort(function(s,t){
var a = s.toLowerCase();
var b = t.toLowerCase();
if(a>b) return 1; // 大於0表示要對調
if(a<b) return -1; // 小於0表示不須對調
return 0; // 表示不用對調
})
// ary=["a", "B", "C", "d"]
需使用function做判斷。
var ary= [2,33,1111,222];
ary.sort(); //return [1111, 2, 222, 33],不符合排序
function compare(a,b){
return a-b; // 大於0代表需要對調
}
ary.sort(compare); // ary=[2,33,222,1111]
// 若要由大到小
function compare(a,b){
return b-a;
}
將多個陣列進行串接,然後回傳一個新的陣列。
var ary= [1,2,3];
ary.concat(4,5); // return [1,2,3,4,5]
ary.concat([4,5]); // return [1,2,3,4,5]
ary.concat([4,5],[6,7]); // return [1,2,3,4,5,6,7]
將陣列切成子陣列,分別傳入兩個參數(開始位置與結束位置(不包含結束位置的元素)),然後回傳一個新的陣列。
var ary= [1,2,3,4,5];
ary.slice(1,3); //return [2,3]
ary.slice(3); // rerutn [4,5]
ary.slice(1,-1) // return [2,3,4]
用來插入或移除陣列元素的通用方法,會修改到原陣列。
var ary= [1,2,3,4,5,6,7,8];
ary.splice(4); // return [5,6,7,8],a=[1,2,3,4]
// 此時 a=[1,2,3,4]
ary.splice(1,2) // return [2,3],a=[1,4]
var ary= [1,2,3,4,5,6,7,8];
ary.splice(2,0,"a","b"); // return [],a=[1,2,"a","b",3,4,5]
// 此時 a=[1,2,"a","b",3,4,5]
ary.splice(2,2,[1,2],3) // return ["a","b"],a=[1,2,[1,2],3,3,4,5,6,7,8]
ary.splice(2,0,"a","b")
第2個參數為0,所以並未刪除元素直接插入新元素ary.splice(2,2,[1,2],3)
第2個參數為2,刪除了兩個元素["a","b"],且從第一個參數的位置開始插入新元素。var ary= [1,2,3,4,5];
ary.push(6,7); // reutnr 7, ary=[1,2,3,4,5,6,7]
ary.pop(); // return 7, ary=[1,2,3,4,5,6]
ary.push([9,0]) //return 7 ary=[1,2,3,4,5,6,[9,0]]
var ary= [1,2,3,4,5];
ary.unshift(6,7); // return 7,ary=[6,7,1,2,3,4,5]
ary.shift(); // return 6,ary=[7,1,2,3,4,5]
將陣列轉字串。
var ary=[1,2,3];
ary.toString(); // return "1,2,3"
[1,2,[3,"a"]].toString(); // return "1,2,3,a"
將陣列所有元素歷遍一次。Array.forEach(function(v,i,a){})
var ary= [1,2,3,4,5];
var sum= 0;
ary.forEach(function(v){
sum += v;
})
sum; //return 15
ary.forEach(function(v,i,a){
a[i] = v*v;
})
ary; // [1,4,9,16,25];
forEach沒有類似break跳出迴圈,需透過throw error。
ary.forEach(function(v){
if(...){
throw new Error("forEach error")
}
})
將陣列每個元素傳遞給指定的function,回傳一個新的陣列,與原陣列長度會一致。(不會修改到原陣列)
var ary= [1,2,3];
ary_1= ary.map(function(v){
return v*v;
})
ary_1; // return [1,4,9],ary=[1,2,3]
將陣列中符合條件的過濾出來,所以回傳的會是原陣列的子集合,不會修改到原陣列array.filter(function(v){ return true/false })
藉由邏輯判斷後回傳true/false,來確認是否符合條件。
var ary= [1,2,3];
ary_1= ary.filter(function(v){
return v%2 !== 0;
});
ary_1; //return [1,3]
filter會跳過稀疏矩陣缺少的陣列。var aryDense= sparseAry.filter(function(){return true;})
可壓縮稀疏矩陣的空缺。
或是將undefined與null也都濾掉a= a.filter(function(){return x!= undefined && x!=null})
對陣列進行某些邏輯判斷,然後回傳true or false。
var ary= [1,2,3];
ary.every(function(v){return v < 10;}) // return true,所有的元素都小於10
ary.every(function(v){return v%2==0;}) // return false,所有的元素都偶數
var ary= [1,2,3];
ary.some(function(v){return v%2==0;}) // return true,有一個元素成立
ary.some(NaN); // return false,沒有任何一個元素成立
在使用some時要注意到,當條件判斷是回覆true,則會停止往下收尋,且回覆true。當條件判斷是一直回覆false,則會一直往下尋找。
every與some剛好相反,當條件判斷是回覆false,則會停止往下收尋,且回覆false。當條件判斷是一直回覆true,則會一直往下尋找。
利用function將陣列元素進行組合,生成單個值。array.reduce(function(x,y,z,k){...},initalVaue)
var ary= [1,2,3,4,5];
var sum= ary.reduce(function(x,y){x+y},0)
x | y |
---|---|
0 | 1 |
1 | 2 |
3 | 3 |
6 | 4 |
10 | 5 |
15 |
var ary= [11,21,13,25,15];
var max= ary.reduce(function(x,y){return x>y? x:y}); // reduce 無第二參數,初始值使用ary第一個元素 11
x | y |
---|---|
11 | 21 |
21 | 13 |
21 | 25 |
25 | 15 |
25 |
reduceRight取值順序是由索引高的開始(陣列由右至左),其他操作與reduce雷同。
收尋陣列中第一個符合條件的值,然後回傳它的索引。若無符合的回傳-1
a =[2,5,1,9,1,5]
a.indexOf(1); // reutrn 2, a[2]=1
a.lastInedxOf(1); // return 4 ,a[4]=1
a.indexOf(3); // return -1
a.indexOf(5,2); //return 5, 從index=2之後開始收尋5,a[5]=5
string 也有indexOf與lastInedxOf,使用方式與上述一樣。
Array.isArray([]) // return true
Array.isArray({}) // return false