JS中的內(nèi)置對(duì)象有:String酌心,Array赫舒,Math,Date东且。今天我們來詳解一下數(shù)組的創(chuàng)建及其方法。
數(shù)組的創(chuàng)建:
①使用數(shù)組構(gòu)造函數(shù):?var?arr?=?new?Array();?
在這里需要說明的是()中可以是預(yù)先知道數(shù)組要保存的項(xiàng)目數(shù)量;也可以向Array構(gòu)造函數(shù)中傳遞數(shù)組應(yīng)包含的項(xiàng)本讥。
②使用數(shù)組字面量表示方法:var?arr?=?[1,2,3];??
Array的棧方法:
①push()
語法:arr.push();
功能:把參數(shù)添加到arr的尾部(會(huì)改變?cè)瓟?shù)組)
返回值:把指定的值添加到數(shù)組后的新長(zhǎng)度
②unshift()
語法:arr.unshift();
功能:把參數(shù)添加到arr的開頭(會(huì)改變?cè)瓟?shù)組)
返回值:把指定的值添加到數(shù)組后的新長(zhǎng)度
③pop()
語法:arr.pop();
功能:刪除arr的最后一個(gè)元素珊泳,如果數(shù)組已經(jīng)為空則不改變數(shù)組,并返回 undefined 值(會(huì)改變?cè)瓟?shù)組)
返回值:被刪除的元素
④shift()
語法:arr.shift();
功能:刪除arr的第一個(gè)元素拷沸,如果數(shù)組為空色查,shift() 方法將不進(jìn)行任何操作,如果是一個(gè)空數(shù)組撞芍,返回undefined(會(huì)改變?cè)瓟?shù)組)
返回值:被刪除的元素
Array的轉(zhuǎn)換方法:join()
語法:arr.join();
功能:把a(bǔ)rr中所有元素放入字符串(不會(huì)改變?cè)瓟?shù)組)
返回值:字符串
Array的重排序方法
①reverse()
語法:arr.reverse();
功能:顛倒數(shù)組中元素的順序(會(huì)改變?cè)瓟?shù)組)
返回值:顛倒順序后的數(shù)組
②sort()
語法:arr.sort();
功能:對(duì)數(shù)組進(jìn)行排序(會(huì)改變?cè)瓟?shù)組)
返回值:重新排序后的數(shù)組
我們來看一個(gè)例子:
var?arr?=?[24,12,13,88,9];???
var?newArr?=?arr.sort();???
console.log(newArr);
大家認(rèn)為打印的出來應(yīng)該是9,12,13,24,88才對(duì)吧综慎,可是結(jié)果呢
我們會(huì)發(fā)現(xiàn)9明明是最小的,但是卻排在了最后面勤庐,這是因?yàn)閟ort()其實(shí)是把每個(gè)一個(gè)數(shù)組項(xiàng)都調(diào)用了toString()方法示惊,先將數(shù)組項(xiàng)轉(zhuǎn)成字符串,再按字符串來排序愉镰,所以“9”就成為了最大的米罚。
如果我們希望按照數(shù)字大小來排序的話,可以給sort()傳入比較函數(shù)作為參數(shù)丈探。
從小到大排序:arr.sort(function(a录择,b){return a-b ;}) ;
從大到小排序:arr.sort(function(a,b){return b-a;});
這個(gè)時(shí)候我們?cè)賹?shù)組排序就會(huì)出現(xiàn)我們想要的結(jié)果碗降。
var?arr?=?[24,12,13,88,9];???
var?newArr?=?arr.sort(function(a隘竭,b){return?a-b;});???
console.log(newArr);?
如果你想從大到小排序只需要將比較函數(shù)中的返回值改一下就OK了。
Array中的連接方法:concat()
語法:arr.concat();
功能:用于連接兩個(gè)或多個(gè)數(shù)組(不會(huì)改變?cè)瓟?shù)組)
返回值:連接后的數(shù)組
Array中的截取方法:slice()
語法:arr.slice(start讼渊,end);
功能:從已有的數(shù)組中返回選定的元素(不會(huì)改變?cè)瓟?shù)組)
返回值:數(shù)組
參數(shù)說明:①start和end是數(shù)組中的索引动看,即整數(shù);
②start是必需的,規(guī)定了從何處開始選取;
③end是可選的爪幻,規(guī)定了從何處結(jié)束選取菱皆,如果沒有指定end時(shí)须误,截取的數(shù)組包含從start開始到數(shù)組結(jié)束的所有元素;
④?截取范圍是start到end-1的元素,end不包含在截取范圍內(nèi);
⑤slice()的參數(shù)中有負(fù)數(shù)仇轻,則用數(shù)組長(zhǎng)度加上該數(shù)來確定相應(yīng)的位置京痢。
Array中的splice方法:可以實(shí)現(xiàn)刪除,插入篷店,替換功能
刪除功能
語法:arr.splice(index祭椰,count);
功能:刪除從index開始的count個(gè)元素(會(huì)改變?cè)瓟?shù)組)
返回值:含有被刪除元素的數(shù)組
參數(shù)說明:①index是開始刪除的元素的索引;
②count是刪除的項(xiàng)目數(shù)疲陕,如果為0吭产,則不會(huì)刪除;如果不設(shè)置,則刪除從index開始的所有數(shù)組項(xiàng)鸭轮。
插入功能
語法:arr.splice(index臣淤,0,item1..... itemx);
功能:在指定位置前插入指定內(nèi)容
返回值:空數(shù)組
參數(shù)說明:①index是起始位置的索引;
②0是要?jiǎng)h除的項(xiàng)數(shù)(因?yàn)椴迦氩恍枰獎(jiǎng)h除數(shù)組項(xiàng)窃爷,所以是0);
③item1... itemx是要插入的內(nèi)容邑蒋。
替換功能
語法:arr.splice(index,count按厘,item1..... itemx);
功能:在指定位置前插入指定內(nèi)容医吊,同時(shí)刪除任意數(shù)量的項(xiàng)
返回值:從原始數(shù)組中刪除的項(xiàng)(如果沒有刪除任何項(xiàng),則返回空數(shù)組)
參數(shù)說明:①index是起始位置的索引;
②count是要?jiǎng)h除的項(xiàng)數(shù);
③item1... itemx是插入的內(nèi)容逮京。
ECMAScript中為數(shù)組實(shí)例添加了兩個(gè)位置方法:indexOf和lastIndexOf
① indexOf()
語法:arr.indexOf(searchValue卿堂,startIndex);
功能:從數(shù)組的開頭開始向后查找(不會(huì)改變?cè)瓟?shù)組)
返回值:查找的項(xiàng)在數(shù)組中的位置,沒有找到的情況下返回-1
②lastIndexOf()
語法:arr.lastIndexOf(searchValue懒棉,startIndex);
功能:從數(shù)組的末尾開始查找(不會(huì)改變?cè)瓟?shù)組)
返回值:查找的項(xiàng)在數(shù)組中的位置草描,沒有找到的情況下返回-1
說明:①這兩個(gè)方法在比較第一個(gè)參數(shù)與數(shù)組中的每一項(xiàng)時(shí),將使用===操作符策严,即要求查找的項(xiàng)必須嚴(yán)格相等;
②兼容性問題穗慕,支持的瀏覽器有:IE9 +,F(xiàn)ireFox2 +妻导,Chrome逛绵,Safari3。
ECMAScript 6為數(shù)組增添的新方法:map()倔韭,reduce()术浪,filter()
①map()
語法:arr.map(函數(shù));
功能:相當(dāng)于讓arr的每個(gè)數(shù)據(jù)執(zhí)行了一次()中的方法,(不會(huì)改變?cè)瓟?shù)組)例:
function add(a){
??? return? b =a*a;
}
var arr = [1,2,3,4];
var newArr =?arr.map(add);
console.log( newArr);
②reduce()
語法:arr.reduce(函數(shù));
功能:把一個(gè)函數(shù)作用在arr的每一個(gè)元素上寿酌,它必須接收兩個(gè)參數(shù)胰苏,reduce()把結(jié)果繼續(xù)和序列的下一個(gè)元素做累積計(jì)算。例:要把[1,2,3,4,5,6]變換成整數(shù)123456份名,就可以用reduce()做到
function changeNumber(x,y){
????? return? x * 10 + y;
?}
var arr = [1,2,3,4,5,6];
var newArr = arr.reduce(changeNumber);
console.log(newArr);
③filter()
語法:arr.filter(函數(shù));
功能:用于把Array的某些元素過濾掉碟联,然后返回剩下的元素妓美,和map()類似僵腺,Array的filter()也接收一個(gè)函數(shù)鲤孵。和map()不同的是,filter()把傳入的函數(shù)依次作用于每個(gè)元素辰如,然后根據(jù)返回值是true還是false決定保留還是丟棄該元素普监。例:利用filter()刪除數(shù)組中的偶數(shù)項(xiàng)
function deleteOushu(x){
???? return x % 2 !== 0;
}
var arr = [1,2,3,4,5,6,7,8,9,10];
var newArr = arr.filter(deleteOushu);
console.log(newArr);
filter()接受的回調(diào)函數(shù)可以有多個(gè)參數(shù),第一個(gè)參數(shù)表示arr的某個(gè)元素琉兜,第二個(gè)參數(shù)表示元素在arr中的位置凯正,第三個(gè)參數(shù)表示數(shù)組本身:
var arr =["a","b","c"];
var newArr = arr.filter(function(element,index,self){
??? console.log(element);???? //依次打印"a","b","c"
???? console.log(index);??????? //依次打印0,1,2
???? console.log(self);??????? ?? //打印arr本身
????? return true;
})