基于JavaScript Array數(shù)組方法(新手必看篇)
Array類型是ECMAScript中最常用的引用類型。ECMAScript中的數(shù)據(jù)與其它大多數(shù)語言中的數(shù)組有著相當大的區(qū)別。雖然ECMAScript中的數(shù)據(jù)與其它語言中的數(shù)組一樣都是數(shù)據(jù)的有序列表,但不同的是,ECMAScript數(shù)組中的每一項可以保存任何類型的數(shù)據(jù),無論是數(shù)值、字符串或者是對象。同時,ECMAScript中的數(shù)組大小是可以動態(tài)調(diào)整的,即可以根據(jù)數(shù)據(jù)的添加自動增長以容納新增的數(shù)據(jù)。下面總結(jié)一下JavaScript中數(shù)組常用的操作函數(shù)及用法。
•創(chuàng)建數(shù)組
創(chuàng)建數(shù)組主要有構(gòu)造函數(shù)和數(shù)組字面量兩種方法,如下所示:
var arr = new Array(); var arr = [];
對于構(gòu)造函數(shù),我們可以傳遞一個數(shù)值創(chuàng)建包含給定項數(shù)的數(shù)組,如下:
var arr = new Array(3); //數(shù)組長度為3
也可以直接傳遞存放于數(shù)組中的值,如下:
var arr = new Array("red","green","blue");
不論哪種方式,推薦使用數(shù)組字面量的形式來創(chuàng)建數(shù)組。
•檢測數(shù)組
對于單一的全局執(zhí)行環(huán)境而言,使用instanceof操作符就可以檢測是否為數(shù)組,例如:
var arr = [1,2,3]; console.log(arr instanceof Array); //true
但如果網(wǎng)頁中包含多個框架,也就包含多個全局執(zhí)行環(huán)境,ES5新增了Array.isArray()方法來確定某個值是否為數(shù)組,而不管它是在哪個全局執(zhí)行環(huán)境中被創(chuàng)建的,如下:
if(Array.isArray(arr)){ //執(zhí)行某些操作 }
•數(shù)組字符串轉(zhuǎn)換
每個對象都具有toLocaleString()、toString()和valueof()方法。調(diào)用數(shù)組的toString()方法會返回數(shù)組中每個值的字符串形式拼接而成并且以逗號分隔的字符串,調(diào)用數(shù)組的valueof()方法返回的還是數(shù)組,實際上調(diào)用的是數(shù)組每一項的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()不同的是它會調(diào)用數(shù)組每一項的toLocaleString()方法,將每一項toLocaleString()方法的返回值以逗號分隔拼接成一個字符串。而使用join()方法,可以使用不同的分隔符來構(gòu)建這個字符串,如下:
var arr = ["red","green","blue"]; console.log(arr.join(",")); //red,green,blue console.log(arr.join("||")); //red||green||blue
•數(shù)組的添加和刪除
push()方法接收任意數(shù)量的參數(shù),把它們逐個添加到數(shù)組末尾,并返回修改修改后數(shù)組的長度,例如:
var arr = [1,2,3]; arr.push(4,5); console.log(arr); //[1,2,3,4,5]
與push()相對的是pop()方法,它從數(shù)組末尾移除最后一項,并返回移除的項,例如:
var arr = [1,2,3]; arr.pop(); //3 arr.pop(); //2 console.log(arr); //[1]
另外兩個使用的方法是shift()和unshift(),它們與pop()和push()類似,shift()方法用于從數(shù)組的起始位置移除項并返回移除項,例如:
var arr = [1,2,3]; arr.shift(); //1 arr.shift(); //2 console.log(arr); //[3]
unshift()方法與shift()用途相反,它能夠在數(shù)組前端添加任意個項并返回新數(shù)組的長度,例如:
var arr = [1,2,3]; arr.unshift(4); //返回長度4 arr.unshift(5); //返回長度5 console.log(arr); //[1,2,3,4,5]
•數(shù)組的翻轉(zhuǎn)與排序
數(shù)組提供的翻轉(zhuǎn)方法為reverse(),它會反轉(zhuǎn)數(shù)據(jù)項的順序,例如:
var arr = [1,2,3]; arr.reverse(); console.log(arr); //[3,2,1]
sort()也可以對數(shù)組進行排序,不過它的默認排序方式并不是大小,而是根據(jù)對應字符串逐個編碼排序的。sort()方法可以接收一個比較函數(shù),進行自定義排序,例如:
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()方法會創(chuàng)建當前數(shù)組的一個副本,然后將接收到的參數(shù)添加到這個副本的末尾,最后返回新構(gòu)建的數(shù)組,原來的數(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()方法接收一個或兩個參數(shù),即要返回項的開始位置和結(jié)束位置。如果只要一個參數(shù),則返回從指定位置開始到數(shù)組結(jié)束的所有項。如果接收兩個參數(shù),則返回起始和結(jié)束位置之間的所有項但不包括結(jié)束位置的項,例如:
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()方法不會影響原來的數(shù)組。
•splice()方法
由于splice()方法非常強大,因此單獨拿出來總結(jié)一下,它可以接收三個參數(shù),第一個參數(shù)表示添加或刪除項目的位置,第二個參數(shù)表示要刪除的項目數(shù)量,第二個參數(shù)表示向數(shù)組中添加的新項目(可選),通過提供不同的參數(shù)可以實現(xiàn)刪除、插入和替換等功能,例如:
var arr = [1,2,3,4,5]; arr.splice(2,0,11,22); //從位置2插入兩項,沒有刪除 console.log(arr); //[1,2,11,22,3,4,5] arr.splice(2,2,33,44); //從位置2開始刪除兩項,插入兩項,返回被刪除的項 console.log(arr); //[1,2,33,44,4,5] arr.splice(1,1); //從位置1開始刪除1項,返回被刪除的項 console.log(arr); //[1,33,44,4,5]
•數(shù)組的位置方法
ES5提供了兩個位置方法:indexOf()和lastIndexOf()。這兩個方法都接收兩個參數(shù):要查找的項和表示查找起點位置的索引(可選)。indexOf()方法從數(shù)組的開頭向后查找,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種迭代方法,每個方法都接收兩個參數(shù):要在每一項上運行的函數(shù)和(可選)運行該函數(shù)的作用域?qū)ο?-影響this的值。傳入這些方法的函數(shù)可以接收三個參數(shù):數(shù)組項的值、該項在數(shù)組中的索引和數(shù)組對象本身。
其中,every()方法和some()方法是相似的。對于every()方法來說,傳入的函數(shù)必須對每一項都返回true,這個方法才返回true。而對于some(),傳入的函數(shù)只要對數(shù)組中的任意一項返回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,某一項大于2即可
filter()方法根據(jù)給定的函數(shù)確定是否在返回的數(shù)組中包含某一項,例如:
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的一個數(shù)組
map()方法對于數(shù)組中的每一項都會運行給定的函數(shù),然后將每一項函數(shù)運行結(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ù)組每一項乘以2后返回
最后一個方法是forEach(),它只對數(shù)組中的每一項運行給定函數(shù),沒有返回值,例如:
var arr = [1,2,3,4,5,4,3,2,1]; arr.forEach(function(item,index,array){ //執(zhí)行某些操作 });
•數(shù)組的縮小方法
ES5還提供了兩個縮小數(shù)組的方法:reduce()和reduceRight()。這兩個方法都會迭代數(shù)組中的所有項,然后返回一個最終的值。reduce()從第一項開始逐漸遍歷到最后一項,reduceRight()從最后一項開始遍歷到第一項結(jié)束。這兩個函數(shù)都接收四個參數(shù):前一個值、當前值、項的索引和數(shù)組對象。這個函數(shù)返回的任何值都會作為第一個參數(shù)自動傳遞給下一項。例如,使用reduce()方法求數(shù)組所有項的和:
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。這個過程會把數(shù)組的每一項都訪問一遍,最后返回結(jié)果。reduceRight()方法與reduce()類似,只不過方向相反而已。
這篇筆記主要是根據(jù)JavaScript高級程序設計和網(wǎng)上資源總結(jié)出來的,如果有不完善的地方還請指出。
以上這篇基于JavaScript Array數(shù)組方法(新手必看篇)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- JavaScript數(shù)組方法大全(推薦)
- JavaScript學習筆記之ES6數(shù)組方法
- js 定義對象數(shù)組(結(jié)合)多維數(shù)組方法
- 數(shù)組方法解決JS字符串連接性能問題有爭議
- javascript中FOREACH數(shù)組方法使用示例
- js數(shù)組方法reduce經(jīng)典用法代碼分享
- js數(shù)組方法擴展實現(xiàn)數(shù)組統(tǒng)計函數(shù)
- Javascript中數(shù)組方法匯總(推薦)
- JavaScript基礎進階之數(shù)組方法總結(jié)(推薦)
- 可能被忽略的一些JavaScript數(shù)組方法細節(jié)
相關文章
JavaScript中實現(xiàn)new的兩種方式引發(fā)的探究
眾所周知JS中new的作用是通過構(gòu)造函數(shù)來創(chuàng)建一個實例對象,這篇文章主要給大家介紹了關于JavaScript中實現(xiàn)new的兩種方式引發(fā)的相關資料,需要的朋友們下面隨著小編來一起學習學習吧2021-05-05原生Javascript封裝的一個AJAX函數(shù)分享
這篇文章主要介紹了原生Javascript封裝的一個AJAX函數(shù)分享,本文是實際項目中提取出來的,簡單易用,需要的朋友可以參考下2014-10-10JavaScript toDataURL圖片轉(zhuǎn)換問題解讀
這篇文章主要介紹了JavaScript toDataURL圖片轉(zhuǎn)換問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06mint-ui的search組件在鍵盤顯示搜索按鈕的實現(xiàn)方法
這篇文章主要介紹了mint-ui的search組件在鍵盤顯示搜索按鈕的實現(xiàn)方法,需要的朋友可以參考下2017-10-10javascript面向?qū)ο蟪绦蛟O計高級特性經(jīng)典教程(值得收藏)
這篇文章主要介紹了javascript面向?qū)ο蟪绦蛟O計高級特性,結(jié)合實例形式詳細講述了javascript對象的創(chuàng)建,訪問,刪除,對象類型,擴展等,需要的朋友可以參考下2016-05-05JS與jQuery實現(xiàn)子窗口獲取父窗口元素值的方法
這篇文章主要介紹了JS與jQuery實現(xiàn)子窗口獲取父窗口元素值的方法,涉及javascript與jQuery操作窗口元素的相關技巧,需要的朋友可以參考下2017-04-04JS報錯Uncaught?TypeError:?XXX?is?not?a?function的解決方法
這篇文章主要給大家介紹了關于JS報錯Uncaught?TypeError:?XXX?is?not?a?function的解決方法,本來好好的,突然就出現(xiàn)的錯誤,不過這并不是什么難解決的錯誤,需要的朋友可以參考下2023-08-08淺析javascript中函數(shù)聲明和函數(shù)表達式的區(qū)別
這篇文章主要介紹了淺析javascript中函數(shù)聲明和函數(shù)表達式的區(qū)別,需要的朋友可以參考下2015-02-02