欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于JavaScript Array數(shù)組方法(新手必看篇)

 更新時(shí)間:2016年08月20日 09:44:15   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇基于JavaScript Array數(shù)組方法(新手必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

Array類(lèi)型是ECMAScript中最常用的引用類(lèi)型。ECMAScript中的數(shù)據(jù)與其它大多數(shù)語(yǔ)言中的數(shù)組有著相當(dāng)大的區(qū)別。雖然ECMAScript中的數(shù)據(jù)與其它語(yǔ)言中的數(shù)組一樣都是數(shù)據(jù)的有序列表,但不同的是,ECMAScript數(shù)組中的每一項(xiàng)可以保存任何類(lèi)型的數(shù)據(jù),無(wú)論是數(shù)值、字符串或者是對(duì)象。同時(shí),ECMAScript中的數(shù)組大小是可以動(dòng)態(tài)調(diào)整的,即可以根據(jù)數(shù)據(jù)的添加自動(dòng)增長(zhǎng)以容納新增的數(shù)據(jù)。下面總結(jié)一下JavaScript中數(shù)組常用的操作函數(shù)及用法。

•創(chuàng)建數(shù)組

創(chuàng)建數(shù)組主要有構(gòu)造函數(shù)和數(shù)組字面量?jī)煞N方法,如下所示:

var arr = new Array(); 
var arr = []; 

對(duì)于構(gòu)造函數(shù),我們可以傳遞一個(gè)數(shù)值創(chuàng)建包含給定項(xiàng)數(shù)的數(shù)組,如下:

var arr = new Array(3);  //數(shù)組長(zhǎng)度為3 

也可以直接傳遞存放于數(shù)組中的值,如下:

var arr = new Array("red","green","blue"); 

不論哪種方式,推薦使用數(shù)組字面量的形式來(lái)創(chuàng)建數(shù)組。

•檢測(cè)數(shù)組

對(duì)于單一的全局執(zhí)行環(huán)境而言,使用instanceof操作符就可以檢測(cè)是否為數(shù)組,例如:

var arr = [1,2,3]; 
console.log(arr instanceof Array);  //true 

但如果網(wǎng)頁(yè)中包含多個(gè)框架,也就包含多個(gè)全局執(zhí)行環(huán)境,ES5新增了Array.isArray()方法來(lái)確定某個(gè)值是否為數(shù)組,而不管它是在哪個(gè)全局執(zhí)行環(huán)境中被創(chuàng)建的,如下:

if(Array.isArray(arr)){ 
    //執(zhí)行某些操作 
} 

•數(shù)組字符串轉(zhuǎn)換

每個(gè)對(duì)象都具有toLocaleString()、toString()和valueof()方法。調(diào)用數(shù)組的toString()方法會(huì)返回?cái)?shù)組中每個(gè)值的字符串形式拼接而成并且以逗號(hào)分隔的字符串,調(diào)用數(shù)組的valueof()方法返回的還是數(shù)組,實(shí)際上調(diào)用的是數(shù)組每一項(xiàng)的toString()方法,如下:

var arr = ["red","green","blue"]; 
console.log(arr.toString());  //red,green,blue 
console.log(arr.valueof());  //red,green,blue 
console.log(arr);       //red,green,blue 

而調(diào)用數(shù)組的toLocaleString()方法,與toString()不同的是它會(huì)調(diào)用數(shù)組每一項(xiàng)的toLocaleString()方法,將每一項(xiàng)toLocaleString()方法的返回值以逗號(hào)分隔拼接成一個(gè)字符串。而使用join()方法,可以使用不同的分隔符來(lái)構(gòu)建這個(gè)字符串,如下:

var arr = ["red","green","blue"]; 
console.log(arr.join(","));  //red,green,blue 
console.log(arr.join("||"));  //red||green||blue 

•數(shù)組的添加和刪除

push()方法接收任意數(shù)量的參數(shù),把它們逐個(gè)添加到數(shù)組末尾,并返回修改修改后數(shù)組的長(zhǎng)度,例如:

var arr = [1,2,3]; 
arr.push(4,5); 
console.log(arr);  //[1,2,3,4,5] 

與push()相對(duì)的是pop()方法,它從數(shù)組末尾移除最后一項(xiàng),并返回移除的項(xiàng),例如:

var arr = [1,2,3]; 
arr.pop();  //3 
arr.pop();  //2 
console.log(arr);  //[1] 

另外兩個(gè)使用的方法是shift()和unshift(),它們與pop()和push()類(lèi)似,shift()方法用于從數(shù)組的起始位置移除項(xiàng)并返回移除項(xiàng),例如:

var arr = [1,2,3]; 
arr.shift();  //1 
arr.shift();  //2 
console.log(arr);  //[3] 

unshift()方法與shift()用途相反,它能夠在數(shù)組前端添加任意個(gè)項(xiàng)并返回新數(shù)組的長(zhǎng)度,例如:

var arr = [1,2,3]; 
arr.unshift(4);  //返回長(zhǎng)度4 
arr.unshift(5);  //返回長(zhǎng)度5 
console.log(arr);  //[1,2,3,4,5] 

•數(shù)組的翻轉(zhuǎn)與排序

數(shù)組提供的翻轉(zhuǎn)方法為reverse(),它會(huì)反轉(zhuǎn)數(shù)據(jù)項(xiàng)的順序,例如:

var arr = [1,2,3]; 
arr.reverse(); 
console.log(arr);  //[3,2,1] 

sort()也可以對(duì)數(shù)組進(jìn)行排序,不過(guò)它的默認(rèn)排序方式并不是大小,而是根據(jù)對(duì)應(yīng)字符串逐個(gè)編碼排序的。sort()方法可以接收一個(gè)比較函數(shù),進(jìn)行自定義排序,例如:

function compare(value1,value2){ 
  return value1-value2; 
} 
var arr = [1,3,2,5,4]; 
arr.sort(compare); 
console.log(arr);  //[1,2,3,4,5] 

•數(shù)組連接

concat()方法會(huì)創(chuàng)建當(dāng)前數(shù)組的一個(gè)副本,然后將接收到的參數(shù)添加到這個(gè)副本的末尾,最后返回新構(gòu)建的數(shù)組,原來(lái)的數(shù)組不變,例如:

var arr = [1,2,3]; 
var arr2 = arr.concat(4,[5,6]); 
console.log(arr);  //[1,2,3] 
console.log(arr2);  //[1,2,3,4,5,6] 

•數(shù)組分割

slice()方法接收一個(gè)或兩個(gè)參數(shù),即要返回項(xiàng)的開(kāi)始位置和結(jié)束位置。如果只要一個(gè)參數(shù),則返回從指定位置開(kāi)始到數(shù)組結(jié)束的所有項(xiàng)。如果接收兩個(gè)參數(shù),則返回起始和結(jié)束位置之間的所有項(xiàng)但不包括結(jié)束位置的項(xiàng),例如:

var arr = [1,2,3,4,5]; 
var arr2 = arr.slice(1);  //[2,3,4,5] 
var arr3 = arr.slice(1,3);  //[2,3] 

注意,slice()方法不會(huì)影響原來(lái)的數(shù)組。

•splice()方法

由于splice()方法非常強(qiáng)大,因此單獨(dú)拿出來(lái)總結(jié)一下,它可以接收三個(gè)參數(shù),第一個(gè)參數(shù)表示添加或刪除項(xiàng)目的位置,第二個(gè)參數(shù)表示要?jiǎng)h除的項(xiàng)目數(shù)量,第二個(gè)參數(shù)表示向數(shù)組中添加的新項(xiàng)目(可選),通過(guò)提供不同的參數(shù)可以實(shí)現(xiàn)刪除、插入和替換等功能,例如:

var arr = [1,2,3,4,5]; 
arr.splice(2,0,11,22);  //從位置2插入兩項(xiàng),沒(méi)有刪除 
console.log(arr);  //[1,2,11,22,3,4,5] 
 
arr.splice(2,2,33,44);  //從位置2開(kāi)始刪除兩項(xiàng),插入兩項(xiàng),返回被刪除的項(xiàng) 
console.log(arr);  //[1,2,33,44,4,5] 
 
arr.splice(1,1);  //從位置1開(kāi)始刪除1項(xiàng),返回被刪除的項(xiàng) 
console.log(arr);  //[1,33,44,4,5] 

•數(shù)組的位置方法

ES5提供了兩個(gè)位置方法:indexOf()和lastIndexOf()。這兩個(gè)方法都接收兩個(gè)參數(shù):要查找的項(xiàng)和表示查找起點(diǎn)位置的索引(可選)。indexOf()方法從數(shù)組的開(kāi)頭向后查找,lastIndexOf()則從數(shù)組的末尾向前查找,例如:

var arr = [1,2,3,4,5,4,3,2,1]; 
console.log(arr.indexOf(4));  //3 
console.log(arr.lastIndexOf(4));  //5 
 
console.log(arr.indexOf(4,4));  //5 
console.log(arr.lastIndexOf(4,4));  //3 

•數(shù)組的迭代方法

ES5定義了5種迭代方法,每個(gè)方法都接收兩個(gè)參數(shù):要在每一項(xiàng)上運(yùn)行的函數(shù)和(可選)運(yùn)行該函數(shù)的作用域?qū)ο?-影響this的值。傳入這些方法的函數(shù)可以接收三個(gè)參數(shù):數(shù)組項(xiàng)的值、該項(xiàng)在數(shù)組中的索引和數(shù)組對(duì)象本身。

其中,every()方法和some()方法是相似的。對(duì)于every()方法來(lái)說(shuō),傳入的函數(shù)必須對(duì)每一項(xiàng)都返回true,這個(gè)方法才返回true。而對(duì)于some(),傳入的函數(shù)只要對(duì)數(shù)組中的任意一項(xiàng)返回true,該方法就返回true。例子如下:

var arr = [1,2,3,4,5,4,3,2,1]; 
var everyResult = arr.every(function(item,index,array){ 
  return (item>2); 
}); 
console.log(everyResult);  //false,并不是全部大于2 
 
var someResult= arr.some(function(item,index,array){ 
  return (item>2); 
}); 
console.log(someResult);  //true,某一項(xiàng)大于2即可 

filter()方法根據(jù)給定的函數(shù)確定是否在返回的數(shù)組中包含某一項(xiàng),例如:

var arr = [1,2,3,4,5,4,3,2,1]; 
var filterResult = arr.filter(function(item,index,array){ 
  return (item>2); 
}); 
console.log(filterResult);  //[3,4,5,4,3],返回所有數(shù)值都大于2的一個(gè)數(shù)組 

map()方法對(duì)于數(shù)組中的每一項(xiàng)都會(huì)運(yùn)行給定的函數(shù),然后將每一項(xiàng)函數(shù)運(yùn)行結(jié)果組成的數(shù)組返回,例如:

var arr = [1,2,3,4,5,4,3,2,1]; 
var mapResult = arr.map(function(item,index,array){ 
  return item*2; 
}); 
console.log(mapResult);  //[2,4,6,8,10,8,6,4,2],原先數(shù)組每一項(xiàng)乘以2后返回 

最后一個(gè)方法是forEach(),它只對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),沒(méi)有返回值,例如:

var arr = [1,2,3,4,5,4,3,2,1]; 
arr.forEach(function(item,index,array){ 
  //執(zhí)行某些操作 
}); 

•數(shù)組的縮小方法

ES5還提供了兩個(gè)縮小數(shù)組的方法:reduce()和reduceRight()。這兩個(gè)方法都會(huì)迭代數(shù)組中的所有項(xiàng),然后返回一個(gè)最終的值。reduce()從第一項(xiàng)開(kāi)始逐漸遍歷到最后一項(xiàng),reduceRight()從最后一項(xiàng)開(kāi)始遍歷到第一項(xiàng)結(jié)束。這兩個(gè)函數(shù)都接收四個(gè)參數(shù):前一個(gè)值、當(dāng)前值、項(xiàng)的索引和數(shù)組對(duì)象。這個(gè)函數(shù)返回的任何值都會(huì)作為第一個(gè)參數(shù)自動(dòng)傳遞給下一項(xiàng)。例如,使用reduce()方法求數(shù)組所有項(xiàng)的和:

var arr = [1,2,3,4,5]; 
var sum = arr.reduce(function(pre,cur,index,array){ 
  return pre+cur; 
}); 
console.log(sum);  //15 

第一次執(zhí)行回調(diào)函數(shù),pre是1,cur是2。第二次,pre是3(1+2),cur是3。這個(gè)過(guò)程會(huì)把數(shù)組的每一項(xiàng)都訪問(wèn)一遍,最后返回結(jié)果。reduceRight()方法與reduce()類(lèi)似,只不過(guò)方向相反而已。

這篇筆記主要是根據(jù)JavaScript高級(jí)程序設(shè)計(jì)和網(wǎng)上資源總結(jié)出來(lái)的,如果有不完善的地方還請(qǐng)指出。

以上這篇基于JavaScript Array數(shù)組方法(新手必看篇)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論