數(shù)組:內(nèi)存中連續(xù)存儲多個變量的存儲空間,
一含潘、聲明數(shù)組:
1.聲明一個空數(shù)組
???????????????var arr=[];
???????????????var arr=new Array()
2.聲明數(shù)組的同時初始化數(shù)據(jù)
var arr=['值1','值2','值3']饲做;
var arr=new Array('值1','值2','值3');
3.創(chuàng)建n個空元素的數(shù)組
???????????????var arr=new Array(n);
二、訪問數(shù)組中的元素
下標(biāo):數(shù)組中唯一標(biāo)識一個元素存儲位置的序號
下標(biāo)默認(rèn)從0開始遏弱,逐漸遞增盆均,不重復(fù)
arr[i]訪問下標(biāo)為i位置的元素
三、數(shù)組的length屬性
標(biāo)識了數(shù)組中理論上的元素個數(shù)
任何情況下腾窝,數(shù)組的長度永遠等于最大下標(biāo)+1
固定套路:
訪問數(shù)組中的最后一個元素arr[arr.length-1]
訪問數(shù)組中倒數(shù)第n個元素 arr[arr.length-n]
末尾追加新元素:arr[arr.length]=新值
js中的數(shù)組有三個不限制:
1.不限制數(shù)據(jù)類型
2.不限制下標(biāo)越界
獲取元素時缀踪,下標(biāo)越界,不報錯虹脯,返回undefined
3.不限制元素的個數(shù) ?
設(shè)置元素時下標(biāo)越界會自動添加新元素
四驴娃、數(shù)組的遍歷
遍歷:一次訪問數(shù)組中的每個元素
?????????????????????for(var i=0;i
console.log(arr[i]);//輸出數(shù)組中的當(dāng)前元素
?????????????????????} ?
關(guān)聯(lián)數(shù)組/hash數(shù)組
索引數(shù)組:下標(biāo)為數(shù)字的數(shù)組
關(guān)聯(lián)數(shù)組:下標(biāo)部位數(shù)字的數(shù)組
???????????????var zse=[];
zse['name']='張三';
???????????????zse['age']='18';
???????????????zse['sex']='boy';
???????????????console.log(zse);
注:關(guān)聯(lián)數(shù)組沒有l(wèi)ength屬性
關(guān)聯(lián)數(shù)組不能用for遍歷循集,要用for....in遍歷
????????????????for(var key in hash){
//key代表關(guān)鍵字唇敞,即下標(biāo)
//hash代表數(shù)組名
????????????????}
五、數(shù)組API:
1.轉(zhuǎn)字符串: 2種
1.將數(shù)組中每個元素都轉(zhuǎn)為字符串咒彤,再用逗號分隔: var str=String(arr);
2.將數(shù)組中每個元素都轉(zhuǎn)為字符串疆柔,再用自定義下標(biāo)連接每個元素:
var str=arr.join("自定義連接符")
強調(diào):如果省略參數(shù),默認(rèn)等效于String
固定套路:
1.無縫拼接: arr.join("")
2.將單詞拼接為句子: arr.join(" ")
3.判斷空數(shù)組: arr.join("")==""
4.根據(jù)數(shù)組中的元素镶柱,動態(tài)生成頁面元素的內(nèi)容
2.拼接和截取:
拼接:
??var newArr=arr1.concat(值1,值2,arr2,....)
將值1,值2,以及arr2中每個元素依次拼接到arr1結(jié)尾旷档,返回新數(shù)組。
何時使用:將多個元素或其他數(shù)組歇拆,拼接到當(dāng)前數(shù)組上時
強調(diào):
1.concat無權(quán)修改原數(shù)組鞋屈,只能返回新數(shù)組
所以,必須用變量接住拼接后的返回值
2.concat可打散數(shù)組類型的參數(shù)為單個元素
截取:(復(fù)制)
??var subArr=arr.slice(starti,endi+1);
復(fù)制arr中starti位置開始到endi結(jié)束的元素組成子數(shù)組返回故觅。
何時:選取數(shù)組中指定位置的子數(shù)組時
強調(diào): 1.無權(quán)修改原數(shù)組厂庇,只返回新子數(shù)組
2.含頭不含尾
3.其實可使用負(fù)數(shù)參數(shù),表示倒數(shù)第n個
簡寫:
1.省略第二個參數(shù),表示一直截取到結(jié)尾
2.兩個都省略输吏,表示完整復(fù)制原數(shù)組中的元素到新數(shù)組权旷。
不能只省略第一個參數(shù)——報錯
3.splice:刪除,插入贯溅,替換
刪除數(shù)組中指定位置的元素:
??arr.splice(starti,n):
刪除arr中starti位置開始的n個元素
其實: var deletes=arr.splice(starti,n)
deletes:返回的被刪除的元素組成的臨時子數(shù)組拄氯。
在數(shù)組指定位置插入新元素:
arr.splice(starti,0,值1,值2,...)
在starti位置插入新值
原starti位置的值被向后順移
強調(diào): splice躲查,不支持打散數(shù)組參數(shù)
插入: splice vs concat
concat只能在開頭或結(jié)尾拼接,不能中間插入坤邪。但可打散數(shù)組類型參數(shù)
splice可在任意位置插入熙含,但不可打散數(shù)組類型參數(shù)。
替換數(shù)組中指定位置的元素
arr.splice(starti,n,值1,值2,...)
先刪除starti位置的n個舊元素
再在starti位置插入新值
強調(diào):刪除的個數(shù)和插入的個數(shù)不必一致
splice可自動調(diào)節(jié)數(shù)組的長度和位置
翻轉(zhuǎn): arr.reverse();
例:var arr=[1,2,3,4,5];
????????????????????var str=arr.reverse();
????????????????????console.log(str);
六艇纺、數(shù)組排序
???????????arr.sort();
????????????????var arr=[2,4,3,5,1];
???????????var str=arr.sort();
??????????console.log(str);
像以下這種函數(shù)用arr.sort無法實現(xiàn)排序怎静,這時候就需要用到比較器函數(shù)
???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));