JavaScript中數(shù)組操作常用方法

1.檢測數(shù)組

1)檢測對象是否為數(shù)組,使用instanceof 操作符

if(value instanceof Array){//對數(shù)組執(zhí)行某些操作}

2)獲取對象的類型,比較是否為object類型(此方法只能檢測是否為Object,不推薦)

if(typeof(value)=="Object"){//對數(shù)組執(zhí)行某些操作}

3)檢測對象是否為數(shù)組,使用Array.isArray()方法(只支持ie9+,firefox 4+,safari 5+,opera 10.5+和chrome)

if(Array.isArray(value)){//對數(shù)組執(zhí)行某些操作}

2. 轉(zhuǎn)換方法

所有對象都具有toLocaleString(),toString()和valueOf()方法.

調(diào)用數(shù)組的toString()方法會(huì)返回由數(shù)組中每個(gè)值的字符串形式拼接而成的一個(gè)以逗號(hào)分隔的字符串.
調(diào)用valueOf()返回的還是數(shù)組.

join()方法:接收一個(gè)參數(shù),即用作分隔符的字符串,然后返回包含所有數(shù)組項(xiàng)的字符串

var colors=["red","green","blue"];alert(colors.join("||"));//red||green||blue

3. 棧方法

棧是一種LIFO(Last-In-First-Out,后進(jìn)先出)的數(shù)據(jù)結(jié)構(gòu).
JavaScript為數(shù)組專門提供了push()和pop方法()方法,以便實(shí)現(xiàn)類似棧的行為
1):push()方法可以接收任意數(shù)量的參數(shù)秋度,把它們逐個(gè)添加到數(shù)組末尾,并返回修改后數(shù)組的長度
2):pop()方法則從數(shù)組末尾移除最后一項(xiàng),減少數(shù)組的length值,然后返回移除的項(xiàng).

var colors=new Array();//創(chuàng)建一個(gè)數(shù)組
var count=colors.push("red","green");//推入兩項(xiàng)
alert(count);//2count=colors.push("black");//推入另一項(xiàng)
alert(count);//3var item=colors.pop();//移除最后一項(xiàng),并返回最后一項(xiàng)的值
alert(item);//“black”alert(colors.length);
//2以上代碼首先我們使用push()將兩個(gè)字符串推入數(shù)組的末尾,并將返回的結(jié)果保存在變量count中.然后再推入一個(gè)值,而結(jié)果任然保存在count中.因?yàn)榇藭r(shí)數(shù)組中包含3項(xiàng),所以push()返回3.在調(diào)用pop()時(shí),它會(huì)返回?cái)?shù)組的最后一項(xiàng),即字符串"black".此后,數(shù)組中僅剩兩項(xiàng).

4. 隊(duì)列方法

棧數(shù)據(jù)結(jié)構(gòu)的訪問規(guī)則是LIFO(Last-In-First-Out,后進(jìn)先出),而隊(duì)列數(shù)據(jù)結(jié)構(gòu)的訪問規(guī)則是FIFO(First-In-First-Out,先進(jìn)先出).
隊(duì)列在列表的末端添加項(xiàng),從列表的前端移除項(xiàng).
JavaScript為隊(duì)列提供了shift()和unshift()方法
1):shift()移除數(shù)組中第一個(gè)項(xiàng)并返回改項(xiàng),同時(shí)將數(shù)組長度減1.
2):unshift()在數(shù)組前端添加任意個(gè)項(xiàng)并返回新數(shù)組的長度.

結(jié)合push()和pop方法,shift()和unshift()方法 做的一個(gè)實(shí)例

var n=new Array("張三","李四"); 
n.push("王五");//添加參數(shù)到數(shù)組末尾,并修改數(shù)組長度 
n.shift();//移除數(shù)組第一項(xiàng),并返回該項(xiàng)
n.unshift("小錢");//添加參數(shù)到數(shù)組前端 
n.pop();//從數(shù)組末尾移除最后一項(xiàng) //循環(huán)顯示出數(shù)組的值 for(var i=0;i<n.length;i++) { console.log(n[i]); }       //小錢 李四** **

5. 重排序方法

數(shù)組中已經(jīng)存在兩個(gè)可以直接用來重排序的方法:reverse()和sort()
在默認(rèn)情況下,sort()方法回按升序排列數(shù)組項(xiàng)——即最小的值位于最前面,最大的值排在最后面,為了實(shí)現(xiàn)排序,sort()方法會(huì)調(diào)用每個(gè)數(shù)組項(xiàng)的toString()轉(zhuǎn)型方法,
然后比較得到的字符串,以確定如何排序.即數(shù)組中的每一項(xiàng)都是數(shù)值,sort()方法比較的也是字符串,如下所示

var values=[0,1,5,10,15]; values.sort();//進(jìn)行排序顯示 alert(values);//0,1,10,15,5

sort()方法根據(jù)測試字符串的結(jié)果改變原來的順序.因?yàn)閿?shù)組5雖然小雨10,但在進(jìn)行字符串比較時(shí),“10”則位于“5"的前面,于是數(shù)組的順序就被修改了.這種排序方式在很多情況下都不是最佳方案,因此sort()方法可以接收一個(gè)比較函數(shù)作為參數(shù),以便我們制定哪個(gè)值位于哪個(gè)值的前面.

比較函數(shù)接收兩個(gè)參數(shù),如果第一個(gè)參數(shù)位于第二個(gè)之前則返回一個(gè)負(fù)數(shù),如果兩個(gè)參數(shù)相等則返回0,如何第一個(gè)參數(shù)位于第二個(gè)之后則返回一個(gè)正數(shù).以下就是一個(gè)簡單的比較函數(shù):

function compare(value1,value2) 
{ if(value1<value2) { return -1; }
else if(value1==value2) { return 0; }else { return 1; } } 
var values=[0,1,5,10,15]; 
values.sort(compare);//進(jìn)行排序顯示 
alert(values);//0,1,5,10,15 

將比較函數(shù)傳遞到sort()方法之后,數(shù)值仍然保持了正確的升序.當(dāng)然,也可以通過比較函數(shù)產(chǎn)生降序排序的結(jié)果,只要交換比較函數(shù)的返回值即可.

注:value1<value2 返回-1表示正序,返回1表示倒序
當(dāng)然如果反轉(zhuǎn)數(shù)組原來的順序,使用reverse()方法要更快一些
當(dāng)然如何對于數(shù)值類型或其valuesOf()方法會(huì)返回?cái)?shù)值類型的對象類型,可以使用一個(gè)更簡單的比較函數(shù).這個(gè)函數(shù)只要用第一個(gè)值減第二個(gè)值即可

function compare(value1,value2){return value1-value2;}此方法返回的是正序

6. 操作方法

1):concat()方法可以基于當(dāng)前數(shù)組中的所有項(xiàng)創(chuàng)建一個(gè)新數(shù)組.
在沒有給concat()方法傳遞參數(shù)的情況下,它只是復(fù)制當(dāng)前數(shù)組并返回副本.如何傳遞給concat()方法的是一個(gè)或多個(gè)數(shù)組,
則該方法會(huì)將這些數(shù)組中的每一項(xiàng)逗添加到結(jié)果數(shù)組中.如果傳遞的值不是數(shù)組,這些值就會(huì)被簡單地添加到結(jié)果數(shù)組的末尾.下面看一個(gè)列子

var colors=["red","green","blue"];
 var color2=colors.concat("yellow",["black","brown"]); 
alert(color2);//red,green,blue,yellow,black,brown

2):slice()方法基于當(dāng)前數(shù)組中的一或多個(gè)項(xiàng)創(chuàng)建一個(gè)新數(shù)組.
slice()方法可以接收一或兩個(gè)參數(shù),即要返回的起始和結(jié)束位置.
在只有一個(gè)參數(shù)的情況下,slice()方法返回從該參數(shù)指定位置開始到當(dāng)前數(shù)組末尾的所有項(xiàng).
如何有兩個(gè)參數(shù),該方法返回起始和結(jié)束位置之間的項(xiàng)——但不包括結(jié)束位置的項(xiàng).slice()方法不會(huì)影響原始數(shù)組,下面看一個(gè)列子

var colors=["red","green","blue","yellow","black"]; 
colors.slice(1);//green,blue,yellow,black 
colors.slice(1,4)//green,blue,yellow

3):splice()方法恐怕要算是最強(qiáng)大的數(shù)組方法了,它有很多種用法。
splice()的主要用途是向數(shù)組的中部插入項(xiàng),但使用這種方法的方式則有如下3種
a:刪除:可以刪除任意數(shù)量的項(xiàng),只需指定2個(gè)參數(shù):要?jiǎng)h除的第一項(xiàng)的位置和要?jiǎng)h除的項(xiàng)數(shù).
列如:splice(0,2)會(huì)刪除數(shù)組中的前兩項(xiàng).

b:插入:可以向指定位置插入任意數(shù)量的項(xiàng),只需要提供3個(gè)參數(shù):起始位置,0(要?jiǎng)h除的項(xiàng)數(shù))和要插入的項(xiàng).
如何要插入多個(gè)項(xiàng),可以再傳入第四,第五,以至任意多個(gè)項(xiàng).
列如:splice(2,0,"red","green")會(huì)從當(dāng)前數(shù)組的位置2開始插入字符串"red"和"green"

c:替換:可以向指定位置插入任意數(shù)量的項(xiàng),且同時(shí)刪除任意數(shù)量的項(xiàng),只需要提供3個(gè)參數(shù):起始位置,要?jiǎng)h除的項(xiàng)數(shù)和要插入的任意數(shù)量的項(xiàng).
插入的項(xiàng)數(shù)不必和和刪除的項(xiàng)數(shù)相等.
列如:splice(2,1,"red","green")會(huì)刪除當(dāng)前數(shù)組位置2的項(xiàng),然后再從位置2開始插入字符串"red"和"green"

注:插入和替換方式相同,不同點(diǎn)就在于第2參數(shù),為0表示插入不刪除,大于0表示要?jiǎng)h除的數(shù)量
splice()方法始終都會(huì)返回一個(gè)數(shù)組,該數(shù)組中包含從原始數(shù)組中刪除的項(xiàng)(如果沒有刪除任何項(xiàng),則會(huì)返回一個(gè)空數(shù)組).

****下面有個(gè)列子用了上述3中splice()方法,如下:

var colors=["red","green","blue"]; var removed=colors.splice(0,1);//刪除第一項(xiàng)
alert(colors);//green,blue
alert(removed);//red,返回的數(shù)組中只有一項(xiàng) removed=colors.splice(1,0,"yellow","orange");//從位置1開始插入2條數(shù)據(jù) 
alert(colors);//green,blue,yellow,orange 
alert(removed);//返回一個(gè)空數(shù)組 
removed=colors.splice(1,1,"red","purple");//從位置1插入2條數(shù)據(jù),并刪除位置1的數(shù)據(jù) 
alert(colors);//green,red,purple,yellow,orange 
alert(removed);//yellow,返回的數(shù)組中只包含一項(xiàng)

7. 位置方法

兩個(gè)位置方法:indexOf()和lastIndexOf(),這兩個(gè)方法都接收兩個(gè)參數(shù):要查找的項(xiàng)和(可選的)表示查找七點(diǎn)位置的索引.
1)indexOf():從數(shù)組的開頭(位置0)開始向后查找
2)lastIndexOf():從數(shù)組的末尾開始向前查找

這兩個(gè)方法都返回查找的項(xiàng)在數(shù)組中的位置,或者在沒找到的情況下返回-1.
在比較第一個(gè)參數(shù)與數(shù)組中的每一項(xiàng)時(shí),會(huì)使用全等操作符,也就是說,要求查找的項(xiàng)必須嚴(yán)格相等
下面寫了這2個(gè)方法的實(shí)例,如下:

var numbers=[1,2,3,4,5,4,3,2,1];
 alert(numbers.indexOf(4));//3 返回第一個(gè)出現(xiàn)的4位置 
alert(numbers.lastIndexOf(4));//5 返回最后一個(gè)出現(xiàn)的4位置 
alert(numbers.indexOf(4,4));//5 從位置4開始查找第一個(gè)4出現(xiàn)的位置 
alert(numbers.lastIndexOf(4,4));//3 從位置4開始查找最后一個(gè)4出現(xiàn)的位置 
var person={name:"ToNi"}; var people=[{name:"ToNi"}]; 
var morePeople=[person]; alert(people.indexOf(person));//返回-1 必須嚴(yán)格相等,不僅僅是值相等 alert(morePeople.indexOf(person));//返回0

8. oop方法

every

arr.every(callback[, thisArg])
every 方法為數(shù)組中的每個(gè)元素執(zhí)行一次 callback 函數(shù),直到它找到一個(gè)使 callback 返回 false(表示可轉(zhuǎn)換為布爾值 false 的值)的元素。如果發(fā)現(xiàn)了一個(gè)這樣的元素搂赋,every 方法將會(huì)立即返回 false。否則记靡,callback 為每一個(gè)元素返回 true逊彭,every 就會(huì)返回 true。callback 只會(huì)為那些已經(jīng)被賦值的索引調(diào)用匪燕。不會(huì)為那些被刪除或從來沒被賦值的索引調(diào)用蕾羊。

filter

var new_array = arr.filter(callback[, thisArg])
filter() 方法創(chuàng)建一個(gè)新數(shù)組, 其包含通過所提供函數(shù)實(shí)現(xiàn)的測試的所有元素。

foreach

forEach() 方法對數(shù)組的每個(gè)元素執(zhí)行一次提供的函數(shù)帽驯。

reduce

arr.reduce(callback[, initialValue])
reduce()方法對累加器和數(shù)組中的每個(gè)元素(從左到右)應(yīng)用一個(gè)函數(shù)龟再,將其減少為單個(gè)值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末尼变,一起剝皮案震驚了整個(gè)濱河市利凑,隨后出現(xiàn)的幾起案子浆劲,更是在濱河造成了極大的恐慌,老刑警劉巖哀澈,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牌借,死亡現(xiàn)場離奇詭異,居然都是意外死亡割按,警方通過查閱死者的電腦和手機(jī)膨报,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來适荣,“玉大人现柠,你說我怎么就攤上這事∈眨” “怎么了晒旅?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長汪诉。 經(jīng)常有香客問我废恋,道長,這世上最難降的妖魔是什么扒寄? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任鱼鼓,我火速辦了婚禮,結(jié)果婚禮上该编,老公的妹妹穿的比我還像新娘迄本。我一直安慰自己,他們只是感情好课竣,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布嘉赎。 她就那樣靜靜地躺著,像睡著了一般于樟。 火紅的嫁衣襯著肌膚如雪公条。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天迂曲,我揣著相機(jī)與錄音靶橱,去河邊找鬼。 笑死路捧,一個(gè)胖子當(dāng)著我的面吹牛关霸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杰扫,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼队寇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了章姓?” 一聲冷哼從身側(cè)響起佳遣,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤炭序,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后苍日,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惭聂,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年相恃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辜纲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拦耐,死狀恐怖耕腾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情杀糯,我是刑警寧澤扫俺,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站固翰,受9級(jí)特大地震影響狼纬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜骂际,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一疗琉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧歉铝,春花似錦盈简、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至类缤,卻和暖如春臼勉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背呀非。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來泰國打工坚俗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留镜盯,地道東北人岸裙。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像速缆,于是被迫代替她去往敵國和親降允。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,238評(píng)論 0 4
  • 由于最近都在freecodecamp上刷代碼艺糜,運(yùn)用了很多JavaScript數(shù)組的方法剧董,因此做了一份關(guān)于JavaS...
    2bc5f46e925b閱讀 1,982評(píng)論 0 16
  • 數(shù)組是值的有序集合幢尚。每個(gè)值叫做一個(gè)元素,而每個(gè)元素在數(shù)組中有一個(gè)位置翅楼,以數(shù)字表示尉剩,稱為索引。 JavaScript...
    劼哥stone閱讀 1,133評(píng)論 6 20
  • 文章鏈接地址String類型 String對象的方法也可以在所有基本的字符串值中訪問到毅臊,其中理茎,繼承的 valueO...
    前端精髓閱讀 553評(píng)論 0 5
  • 在半導(dǎo)體行業(yè)從業(yè)過五年,半導(dǎo)體的設(shè)備工業(yè)自動(dòng)化15年前已經(jīng)達(dá)到管嬉,一條晶圓生產(chǎn)線中需要1名操作員皂林,一條封裝線只需要4...
    劉旗閱讀 261評(píng)論 0 0