數組:內存中連續存儲多個變量的存儲空間,
一、聲明數組:
1.聲明一個空數組
???????????????var arr=[];
???????????????var arr=new Array()
2.聲明數組的同時初始化數據
var arr=['值1','值2','值3'];
var arr=new Array('值1','值2','值3');
3.創建n個空元素的數組
???????????????var arr=new Array(n);
二、訪問數組中的元素
下標:數組中唯一標識一個元素存儲位置的序號
下標默認從0開始,逐漸遞增,不重復
arr[i]訪問下標為i位置的元素
三、數組的length屬性
標識了數組中理論上的元素個數
任何情況下,數組的長度永遠等于最大下標+1
固定套路:
訪問數組中的最后一個元素arr[arr.length-1]
訪問數組中倒數第n個元素 arr[arr.length-n]
末尾追加新元素:arr[arr.length]=新值
js中的數組有三個不限制:
1.不限制數據類型
2.不限制下標越界
獲取元素時,下標越界,不報錯,返回undefined
3.不限制元素的個數 ?
設置元素時下標越界會自動添加新元素
四、數組的遍歷
遍歷:一次訪問數組中的每個元素
?????????????????????for(var i=0;i
console.log(arr[i]);//輸出數組中的當前元素
?????????????????????} ?
關聯數組/hash數組
索引數組:下標為數字的數組
關聯數組:下標部位數字的數組
???????????????var zse=[];
zse['name']='張三';
???????????????zse['age']='18';
???????????????zse['sex']='boy';
???????????????console.log(zse);
注:關聯數組沒有length屬性
關聯數組不能用for遍歷,要用for....in遍歷
????????????????for(var key in hash){
//key代表關鍵字,即下標
//hash代表數組名
????????????????}
例:
var wangshuaikang=[];
?????????????wangshuaikang['pt']='women';
???????????????wangshuaikang['ppt']='chou';
????????????wangshuaikang['pppt']='hei';
wangshuaikang['ppppt']='胸大';
wangshuaikang['pppppt']='無腦';
??????????????console.log(wangshuaikang);
???????????for(var erhou in wangshuaikang){
????????????console.log(wangshuaikang[erhou]);
??????}
五、數組API:
1.轉字符串: 2種
1.將數組中每個元素都轉為字符串,再用逗號分隔: var str=String(arr);
例:
var arr=[1,2,3,4,5,6];
???????????????????????var str=String(arr);
?????????????????????????console.log(str);
???????????????????????console.log(arr); ?
2.將數組中每個元素都轉為字符串,再用自定義下標連接每個元素:
var str=arr.join("自定義連接符")
強調:如果省略參數,默認等效于String
固定套路:
1.無縫拼接: arr.join("")
2.將單詞拼接為句子: arr.join(" ")
3.判斷空數組: arr.join("")==""
4.根據數組中的元素,動態生成頁面元素的內容
例:
轉換為單詞,或句子,如果連接符為空,則和string一樣
????????????????????????var arr=['I','o','v','e'];
???????????????????????var str=arr.join('');
????????????????????????var str2=arr.join('-');
???????????????????????console.log(str);
?????????????????????????console.log(str2);
2.拼接和截取:
拼接:
??var newArr=
arr1.concat(值1,值2,arr2,....)
將值1,值2,以及arr2中每個元素依次拼接到arr1結尾,返回新數組。
何時使用:將多個元素或其他數組,拼接到當前數組上時
強調:
1.concat無權修改原數組,只能返回新數組
所以,必須用變量接住拼接后的返回值
2.concat可打散數組類型的參數為單個元素
截取:(復制)
??var subArr=arr.slice(starti,endi+1);
復制arr中starti位置開始到endi結束的元素組成子數組返回。
何時:選取數組中指定位置的子數組時
強調: 1.無權修改原數組,只返回新子數組
2.含頭不含尾
3.其實可使用負數參數,表示倒數第n個
簡寫:
1.省略第二個參數,表示一直截取到結尾
2.兩個都省略,表示完整復制原數組中的元素到新數組。
不能只省略第一個參數——報錯
3.splice:刪除,插入,替換
刪除數組中指定位置的元素:
????arr.splice(starti,n):
刪除arr中starti位置開始的n個元素
其實: var deletes=arr.splice(starti,n)
deletes:返回的被刪除的元素組成的臨時子數組。
在數組指定位置插入新元素:
arr.splice(starti,0,值1,值2,...)
在starti位置插入新值
原starti位置的值被向后順移
強調: splice,不支持打散數組參數
插入: splice vs concat
concat只能在開頭或結尾拼接,不能中間插入。但可打散數組類型參數
splice可在任意位置插入,但不可打散數組類型參數。
替換數組中指定位置的元素
arr.splice(starti,n,值1,值2,...)
先刪除starti位置的n個舊元素
再在starti位置插入新值
強調:刪除的個數和插入的個數不必一致
splice可自動調節數組的長度和位置
翻轉: arr.reverse();
六、數組排序
???????????arr.sort();
???????????????var arr=[2,4,3,5,1];
???????????var str=arr.sort();
?????????console.log(str);
像以下這種函數用arr.sort無法實現排序,這時候就需要用到比較器函數
???var arr=[1,12,22,13,23,33,3,2];
???function cmp(a,b){
return a-b;升序排列
return b-a;降序排列
???}
???????console.log(arr.sort(cmp));
???????七.數組API
1.String()把數組轉為字符串
????????????????var arr=[1,2,3,4,5];
????????????????var str=String(arr);
????????????????console.log(str);
不修改原數組
例:
??????????????????????var arr=[1,2,3,4,5,6];
??????????????????????var str=String(arr);
??????????????????????console.log(str);
???????????????????????console.log(arr); ?
2.join('')拼接,把數組中的元素拼接為字符串 ??
???var arr=['a','b','c','d','e'];
???var str=arr.join('-');
var str=arr.join();//join中不添加任何拼接符的時候默認和String一樣
???console.log(str);
例:
轉換為單詞,或句子,如果連接符為空,則和string一樣
????????????????????????????var arr=['I','o','v','e'];
????????????????????????????var str=arr.join('');
????????????????????????????var str2=arr.join('-');
????????????????????????????console.log(str);
????????????????????????????console.log(str2);
3.concat()拼接
???var arr=[1,2,3,4,5];
???var str=arr.concat('a','b');
???console.log(str);
2個數組拼接
????????????????????var arr=[1,2,3,4,5,6];
???????????????????var arr2=['true','false'];
???????????????????var str1=arr.concat(arr2);
???????????????????console.log(str1)/
注:join和concat的區別
join適用于把字母拼接為單詞,把單詞拼接為句子,拼出來的是字符串
concat是給數組后面拼接新元素,或把兩個數組拼接,拼出的還是數組
4.slice(strati,endi+1)截取
特點1.含頭不含尾
特點2.如果省略第二個參數默認從第一個參數開始截取到末尾
特點3.如果兩個參數都省略相當于復制原字符串
支持負數參數
?????????????????????var arr=[1,2,3,4,5];
var str1=arr.slice(1,3);從下標為1的位置截取到下標為3的位置
?????????????????????console.log(str1);
var str2=arr.slice(1);如果省略第二個參數默認從第一個參數開始截取到末尾
var str3=arr.slice();如果兩個參數都省略相當于復制原字符串
var str4=arr.slice(-4,-2);支持負數參數,小數在前,大數在后
?????????????????????console.log(str4);
例:
????????????????????????var arr=[1,2,3,4,5,6];
var str=arr.slice(1,5);含頭不含偉
var str=arr.slice(-3,-1);下標可以用負數
var str=arr.slice(2);第二個參數可以省略,從當前下表開始到最后
var str=arr.slice();復制數組
????console.log(str);
5.splice(strati,n)刪除 插入 替換
刪除
??????????????????????var arr=[1,2,3,4,5];
var str=arr.splice(1,2);//表示從下標為1的位置處開始刪除2個
??????????????????????console.log(str);
??????????????????????console.log(arr);
插入
????????????????????????var arr=[1,2,3,4,5];
var str=arr.splice(1,0,'a','b','c');//從下標為1的位置處開始刪除0個并插入新元素
????????????????????????console.log(arr);*/
替換
????????????????????????var arr=[1,2,3,4,5];
var str=arr.splice(1,2,'a','b');//從下標為1的位置處開始刪除2個并替換新元素
????????????????????????console.log(arr);
例:
刪除:
????????????????????????????var arr=[1,2,3,4,5,6,7];
????????????????????????????var str=arr.splice(1,4);
????????????????????????????console.log(arr);
添加:
???????????????????????????var arr=[1,2,3,4,5,6,7];
???????????????????????????var str=arr.splice(1,0,'9','8');
???????????????????????????console.log(arr);
替換:
???????????????????????????var arr=[1,2,3,4,5,6,7];
???????????????????????????var str=arr.splice(1,4,'t','e','w');
???????????????????????????console.log(arr);
6.reverse()翻轉
????????????????????var arr=[1,2,3,4,5];
????????????????????var str=arr.reverse();
????????????????????console.log(str);
例:
????????????????var arr=['w','s','k','I','v','o','e'];
??????????????var str=arr.reverse();
???????????????console.log(str);
排序:
例:
?????????????????var arr=[2,3,6,9,7,5,4,1,8];
???????????????????var str=arr.sort();
??????????????????var app=str.reverse();
??????????????????console.log(app);
??????????var arr=[2,3,666,9,76,5,46,16,8,1];
????????function app(a,b){
????????????return a-b;
????????}
????????console.log(arr.sort(app));