陣列
陣列:一組變數的集合,起一個統一的名字。
如何使用陣列:建立 取值 賦值
建立:共四種
-
建立空陣列:var 陣列名=[]; var 陣列名=new Array();
何時使用:暫時不知道資料內容,先建立空陣列,再追加
-
建立同時初始化陣列內容:var 陣列名=[值1,值2,…]
何時使用:建立時,就已經知道陣列的內容
-
建立指定元素個數的陣列: var 陣列名=new Array(n);建立一個新陣列物件,同時初始化n個空元素
-
建立同時初始化陣列內容:var 陣列名=new Array(值1,值2,…)
var week=["日","一","二","三","四","五","六"];
0 1 2 3 4 5 6
console.log("今天星期"+week[5]);
陣列中每個元素<==>一個變數: 用法和變數完全相同!
2. 取值:獲取陣列中指定位置的元素內容
下標:陣列中標識每個元素位置的序號
預設,自動從0開始,每個+1,到元素個數-1結束
如何取值:var 元素的值=陣列名[下標];
3. 賦值:將新值放入指定位置的元素中儲存
如何賦值:陣列名[下標]=新值;
陣列是引用型別的物件:
陣列名作為變數賦值或引數傳遞時,都是將地址值複製給對方
後果,對方修改陣列的內容,訪問原數字名也會受影響
null: 主動釋放一個物件的引用。null本身是原始型別的值
垃圾回收器:伴隨主程式,同時執行的後臺程式
記錄每個物件當前被引用的次數
被引用的次數==0,垃圾回收器自動釋放物件記憶體空間
強烈建議:在使用完,較大物件後,主動賦值為null,總是好習慣
-
獲取陣列的元素個數:arr.length屬性,不加圓括號
固定套路:
獲得陣列最後一個元素:arr[arr.length-1];向陣列末尾追加一個新元素:arr[arr.length]=新值 js中的陣列 vs 其他語言中的陣列:3個區別: 1. 不限制元素的資料型別 2. 不限制陣列長度 3. js的陣列越界不會出錯! 賦值時:自動建立制定下標的元素,儲存新值 length屬性,會隨最大下標而變化 取值時:檢視從沒有的下標位置取值,返回undefined
-
遍歷陣列:從第0個元素開始,依次獲取每個元素,
對每個元素執行相同的操作 下標:遍歷陣列時,天生的迴圈變數!
-
var emps=[];
var input=``;
while((input=prompt("輸入員工姓名"))!="exit"){
emps[emps.length]=input;
}
console.log(emps);
var arr=[2,5,4,6,7,9];
function getMax(arr){
var max=arr[0];
for(var i=1;i<arr.length;i++){
arr[i]>max&&(max=arr[i]);
}
return max;
}
console.log(getMax(arr));//獲取陣列中最大值
//獲取元素下標的位置
function indexOf(arr,elem){
for(var i=0;i<arr.length;i++){
if (arr[i]==elem) {
return 1;
} else{
return -1;
}
}
}
var emps=["A","B","C","E"];
console.log(indexOf(emps,prompt("輸入要查詢的姓名")));
//氣泡排序
function myArr(arr){
for(var i=0;i<arr.length;i++){
for(var j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
var temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
var arr=[12,4,9,21,43,3];
myArr(arr);
console.log(arr);
關聯陣列
陣列的API:
關聯陣列(hash陣列):可自定義元素下標名稱的陣列(關聯陣列是字串)
索引陣列:自動從0開始分配連續不重複的序號下標
如何建立關聯陣列:2種方式:
1. 先建立普通空陣列,再追加自定義下標的元素
var ym=[];
ym["sname"]="MM";
ym["A"]=81;
ym["B"]=53;
ym["C"]=89;
*關聯陣列的length屬性失效*
*關聯陣列中的key不能重複*
關聯(hash)陣列優勢:查詢極快!和元素個數無關!
2. 建立陣列同時,初始化元素內容:
var mm={"sname":"MM","A":81,"B":53,"C":89};
key value
關聯陣列中儲存的是多個key/value對兒
鍵 值
//陣列去重
var arr=[2,2,4,5,3,6,5,3];
function myArr(arr){
var arr1=[];
for(var i=0;i<arr.length;i++){
if(arr1.indexOf(arr[i])==-1){
arr1.push(arr[i]);
}
}
return arr1;
}
console.log(arr);
console.log(myArr(arr));
如何遍歷關聯陣列:
for(var key in arr){
//依次取出arr中每個key,存在變數key中
arr[key]-->獲得當前正在遍歷的key中儲存的值
}
## 陣列API ##
陣列轉換成字串:有兩種方法
-
var str=arr.toString(); 預設只能以逗號分隔每個元素。
-
var str=arr.join(“連線符”);自定義元素間的連線符
固定套路:-
將字元陣列,無縫拼接為單詞:
比如: var chars=[“H”,”e”,”l”,”l”,”o”]; -
將單詞陣列,拼接為句子:
-
將陣列轉化為頁面上的列表/選擇元素:
優化:頻繁字串拼接,推薦使用陣列的join方法作為替代
步驟:-
先將要拼接的子字串,放入一個陣列中,臨時儲存
-
遍歷結束後,一次性join成一個完整字串
-
var words=["we","two","who","and","who"];
var str=words.join(" ");
console.log(str);//we two who and who
連線陣列和獲取子陣列:不修改原陣列物件,返回新陣列物件
concat: var newArr=arr.concat(值1,值2,[值3,值4].....)
slice: var subArr=arr.slice(starti[,endi+1]);
starti: 開始的位置下標
endi: 獲取到的位置下標
***含頭不含尾***
slice支援倒數下標
省略endi,從starti一直取到結尾
var arr=[1,4,3];
var arr1=[22,44];
var newArr=arr.concat(13,134,arr1);
console.log(arr);
splice:刪除,插入,替換任意位置的任意個元素
***直接修改原陣列
刪除:splice(starti,n);//starti
var arr=[1,2,4,4,5];
var id=arr.splice(2,2);
console.log(arr);
console.log(id);