js數(shù)組常用方法

創(chuàng)建數(shù)組的方式

1.通過構(gòu)造函數(shù)創(chuàng)建數(shù)組

* 1.創(chuàng)建指定大小的數(shù)組
   let 數(shù)組名 = new Array(數(shù)組長(zhǎng)度)

* 2.創(chuàng)建空數(shù)組
   let 數(shù)組名 = new Array()

* 3.創(chuàng)建一個(gè)給定數(shù)據(jù)的數(shù)組
   let 數(shù)組名 = new Array(data1,data2,...)

2.通過字面量創(chuàng)建數(shù)組

1.創(chuàng)建一個(gè)空數(shù)組
let 數(shù)組名 = []
2.創(chuàng)建一個(gè)給定數(shù)據(jù)的數(shù)組
let 數(shù)組名 = [data,data1,data2...]

數(shù)組的長(zhǎng)度

    let array = [1,4,[3,5]]
    let arrayLet = array.length  //3

數(shù)組的方法有原型方法邮丰,也有object繼承的方法吻商,原型方法有這些

join()
push() 和 pop()
shift() 和 unshift()
sort()
reverse()
concat()
slice()
splice()
indexOf()和lastIndexOf()
forEach()
map()
filter()
every()
some()
reduce()和reduceRight()

1.join(separator)

  • join(separator) 將數(shù)組元素以separator分割娶靡,省略的話則用默認(rèn)的逗號(hào)分隔符,該方法只接收一個(gè)參數(shù)即分割符
    var arr = [1,2,4]
    var arr2 = arr.join() 1,2,3
    var arr3 = arr.join('*') //1-2-3
  • 通過join()方法實(shí)現(xiàn)重復(fù)字符串纸兔,只需傳入重復(fù)字符串以及重復(fù)的次數(shù),就能返回需要的重復(fù)字符串
    funvtion repeatString(str,n){
        return  new Array(n+1).join(str)
    }
    console.log(repeatString('123'否副,3)) //123123123

2.push()和 3.pop()

push()可以接受任意數(shù)量的參數(shù)汉矿,把它們逐個(gè)添加到數(shù)組的末尾,并返回修改后數(shù)組的長(zhǎng)度
pop()數(shù)組末尾移除最后一項(xiàng)备禀,減少數(shù)組的length值洲拇,然后返回移除的項(xiàng)

var arr = ['a','b','c']
var count = arr.push('d','e')
console.log(arr) //(5) ['a','b,'c,'d,'e']
var item = arr.pop()
console.log(item) //e
console.log(arr) //['a','b','c','d']
var item = arr.pop('c','d')
console.log(item1) //d
console.log(arr) //['a','b','c']
 
 注意pop()里面沒有參數(shù),及時(shí)有參數(shù)曲尸,也是刪除最后一項(xiàng)

4.shift()和5.unshift()

shift():刪除原數(shù)組第一項(xiàng)赋续,并返回刪除元素的值,如果數(shù)組為空返回undefined
unshift():將參數(shù)添加到原數(shù)組開頭另患,并返回?cái)?shù)組的長(zhǎng)度
這組方法和上面的push和pop()方法正好對(duì)應(yīng)一個(gè)是操作數(shù)組的開頭纽乱,一個(gè)是操作數(shù)組的結(jié)尾

var arr = ['a','b','c']
var count = arr.unshift('d','e')
console.log(arr) //(5) ['d,'e','a','b,'c]


var item = arr.shift()
console.log(item1) //d
console.log(arr) //['e','a','b,'c]

sort()

sort():按升序排列數(shù)組項(xiàng)——即最小的值位于最前面,最大的值排在最后面昆箕。
在排序時(shí)鸦列,sort()方法會(huì)調(diào)用每個(gè)數(shù)組項(xiàng)的toString()轉(zhuǎn)型方法,然后比較得到字符串鹏倘,以確定如何排序薯嗤,即使數(shù)組中的每項(xiàng)都是數(shù)值,sort方法比較的也是字符串纤泵,因此會(huì)出現(xiàn)以下情況

var arr = ['d','b','a','c']
console.log(arr1) //['a','b','c','d']
arr2 = [13,24,51,3]
console.log(arr2.sort()) //[13,24,3,51]
console.log(arr2) //[13,24,3,51](元數(shù)組被改變)

為了解決上述問題骆姐,sort()方法可以接收一個(gè)比較函數(shù)作為參數(shù),以便我們指定哪個(gè)值 位于那個(gè)值的前面夕吻。比較函數(shù)接收兩個(gè)參數(shù)诲锹,如果第一個(gè)參數(shù)應(yīng)該位于第二個(gè)之前則返回一個(gè)負(fù)數(shù),如果兩個(gè)參數(shù)相等則返回0涉馅,如果第一個(gè)參數(shù)應(yīng)該位于第二個(gè)之后返回一個(gè)正數(shù)归园,

function compare (value1,value2){
    return value1-value2
}
var arr =[9,2,3,14,45]
console.log(arr,sort(conpare)) //[2,10,13,54,87]

6.reverse()

reverse():反轉(zhuǎn)數(shù)組項(xiàng)的順序(原數(shù)組改變)

var arr = [13,54,3,10,87]
console.log(arr,reverse) [87,10,3,54,13]
console.log(arr) [87,10,3,54,13](原數(shù)組改變)

7.concat()

concat()將參數(shù)添加到原數(shù)組中,這個(gè)方法會(huì)先創(chuàng)建當(dāng)前數(shù)組一個(gè)副本稚矿,然后將接收到的參數(shù)添加到這個(gè)副本的末尾庸诱,最后返回新構(gòu)建的數(shù)組捻浦,在沒有給
concat()方法傳遞參數(shù)的情況下,他只是復(fù)制當(dāng)前數(shù)組返回副本

var arr =[1,3,5,7]
var arrCopy = arr.concat(9,[11,13])
console.log(arrCopy)//[1,3,4,7,9,11,13]
console,log(arr) [1,3,5,7] 原數(shù)組未修改

傳入的不是數(shù)組桥爽,則直接把參數(shù)添加到數(shù)組后面朱灿。如果傳入的是數(shù)組,則將數(shù)組中的各項(xiàng)添加到數(shù)組中钠四,但是如果傳入的是一個(gè)二維數(shù)組

var arr = [1,3,5,7]
var arrCopy2 = arr.concat([9,[11,13]])
console.log(arrCopy2) [1,3,5,7,9,Array[2]]
console.log(arrCopy2[5]) //[11,13]

arrCopy2數(shù)組的第五項(xiàng)是一個(gè)包含兩項(xiàng)的數(shù)組盗扒,也就是說concat方法只能將傳入數(shù)組中的每一項(xiàng)添加到數(shù)組中,如果傳入數(shù)組中有些項(xiàng)是數(shù)組缀去,那么也會(huì)把這一數(shù)組項(xiàng)當(dāng)作一項(xiàng)添加到arrCopy2中

8.slice() 和 9.splice()

slice()返回原數(shù)組中指定開始下標(biāo)到結(jié)束下標(biāo)之間的項(xiàng)組成新的數(shù)組侣灶,slice()方法可以接受一個(gè)或者兩個(gè)參數(shù)
既要返回項(xiàng)的起始和結(jié)束位置,在只有一個(gè)參數(shù)的情況下缕碎,slice()方法返回從該參數(shù)指定位置開始當(dāng)前數(shù)組末尾的所有項(xiàng)褥影。如果有兩個(gè)參數(shù),該方法回起始和結(jié)束的位置之間的項(xiàng)但不包括結(jié)束位置的項(xiàng)

var arr = [1,3,5,7,9,11]
var arr2 = arr.slice(0,2)
console.log(arr) [5,7,9,11]
console.log(arr2) [1,3]
var arr3 = arr.splice(2,0,4,6)
console.log(arr)  [5,7,4,6,9,11]
console.log(arr3) []
var arr4 = arr.splice(1,1,2,4)

console.log(arr) [5,2,4,4,6,9,11]
console.log(arr4) [7]

10.indexOf() 和 10.lastIndexOf()

indexOf():接收兩個(gè)參數(shù):要查找的項(xiàng)和(可選的)表示查找起點(diǎn)位置的索引咏雌。其中凡怎, 從數(shù)組的開頭(位置 0)開始向后查找。
lastIndexOf:接收兩個(gè)參數(shù):要查找的項(xiàng)和(可選的)表示查找起點(diǎn)位置的索引赊抖。其中统倒, 從數(shù)組的末尾開始向前查找。

這兩個(gè)方法都返回要查找的項(xiàng)在數(shù)組中的位置熏迹,或者在沒找到的情況下返回-1檐薯。在比較第一個(gè)參數(shù)與數(shù)組中的每一項(xiàng)時(shí),會(huì)使用全等操作符注暗。

var arr = [1,5,6,7,8,9,5,7,1]
console.log(arr.indexOf(5)) // 2
console.log(arr.lastIndexOf(5)) // 5
console.log(arr.indexOf(5,2)) // 2
console.log(arr.lastIndexOf(5,4)) // 2
console.log(arr.indexOf('5')) // -1

數(shù)組的遍歷

for(var i=0;i<arr.length;i++){
    console.log(arr[i])
}
for(var j in arr){
    console.log(arr[j])
}

數(shù)組的迭代方法
ECMAScript為數(shù)組定義了五個(gè)迭代方法坛缕,每個(gè)方法都接收兩個(gè)參數(shù):要在每一項(xiàng)上面運(yùn)行的函數(shù)和運(yùn)行該函數(shù)的作用域——影響this的值。傳入這些方法的函數(shù)會(huì)接收三個(gè)參數(shù)(數(shù)組項(xiàng)的值捆昏,索引赚楚,數(shù)組本身)

12.forEach()

forEach() 對(duì)數(shù)組的每一項(xiàng)運(yùn)行給定函數(shù),該方法沒有返回值

var arr =[1,2,3,4,5]
arr.forEach(function(item,index,array){
    console.log(index + '-' + item + '-' + array)
    0-1-1,2,3,4,5
    1-2-1,2,3,4,5
    2-3-1,2,3,4,5
    3-4-1,2,3,4,5
    4-5-1,2,3,4,5
})

13.map()

map() :對(duì)數(shù)組的每一項(xiàng)運(yùn)行給定函數(shù)骗卜,返回每次函數(shù)調(diào)用結(jié)果所組成的數(shù)組

var arr =[1,2,3,4,5]
var a = arr.map(function(value){
    return  value*3
})
console.log(a) [3,6,9,12,15]
a[1] = 100
console.log(a) [3,100,9,12,15]
console.log(arr) [1,2,3,4,5]

14.filter()

filter() :對(duì)數(shù)組的每一項(xiàng)運(yùn)行給定函數(shù)宠页,返回該函數(shù)會(huì)返回true的項(xiàng)組成的數(shù)組。

var arr = [1,2,3,4,5]
var a = arr.filter(function(value){
    return value>3
})
console.log(a) [4,5]
console.log(arr) [1,2,3,4,5]
對(duì)新數(shù)組變化不會(huì)影響原數(shù)組的改變

15.every()

every() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行都給定函數(shù)寇仓,如果該函數(shù)對(duì)每一項(xiàng)都返回true举户,則返回true

var arr =[1,2,3,4,5]
var b = arr.every(function (value){
    return value>3
})
console.log(b) false
console.log(arr) [1,2,3,4,5]

16.some()

some(): 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)任一項(xiàng)返回true遍烦,則返回true

var arr =[1,2,3,4,5]
var b = arr.some(function (value){
    return value>3
})
console.log(b) true

let c = arr.some(function(value,index,array){
    return value>2 && value>2
})
console.log(c) true
console.log(arr) [1,2,3,4,5]

17.reduce()與 18.reduceRight() 迭代方法

這兩個(gè)方法都接收兩個(gè)參數(shù):一個(gè)在每一項(xiàng)上面調(diào)用的函數(shù)和(可選)作為歸并基礎(chǔ)的初始值俭嘁。

給reduce和reduceRight這兩個(gè)方法的函數(shù)都接收四個(gè)參數(shù)值:前一個(gè)值,當(dāng)前值服猪,索引拐云,數(shù)組對(duì)象。這個(gè)函數(shù)返回的任何值都會(huì)作為第一個(gè)參數(shù)自動(dòng)傳給下一項(xiàng)近她。第一次迭代發(fā)生在數(shù)組的第二項(xiàng)上叉瘩,因此第一個(gè)參數(shù)是數(shù)組的第一項(xiàng)粘捎,第二個(gè)參數(shù)是數(shù)組的第二項(xiàng)薇缅。

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

第一次執(zhí)行回調(diào)函數(shù)的時(shí)候,pre為1咧纠,cur為2泻骤,第二次漆羔,pre為3(1加2的結(jié)果)演痒,cur為3(數(shù)組的第三項(xiàng)),依次類推趋惨,直到將數(shù)組的每一項(xiàng)都訪問一遍鸟顺,最后返回結(jié)果。

reduceRight()與reduce()使用一樣器虾,只不過是從后往前遍歷讯嫂。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市兆沙,隨后出現(xiàn)的幾起案子欧芽,更是在濱河造成了極大的恐慌,老刑警劉巖葛圃,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件千扔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡库正,警方通過查閱死者的電腦和手機(jī)曲楚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來褥符,“玉大人龙誊,你說我怎么就攤上這事∈舭辏” “怎么了载迄?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵讯柔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我护昧,道長(zhǎng)魂迄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任惋耙,我火速辦了婚禮捣炬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绽榛。我一直安慰自己湿酸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布灭美。 她就那樣靜靜地躺著推溃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪届腐。 梳的紋絲不亂的頭發(fā)上拔鹰,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天鹃两,我揣著相機(jī)與錄音舌稀,去河邊找鬼聂儒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛围详,可吹牛的內(nèi)容都是我干的朴乖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼助赞,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼买羞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嫉拐,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤哩都,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后婉徘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漠嵌,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年盖呼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了儒鹿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡几晤,死狀恐怖约炎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤圾浅,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布掠手,位于F島的核電站,受9級(jí)特大地震影響狸捕,放射性物質(zhì)發(fā)生泄漏喷鸽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一灸拍、第九天 我趴在偏房一處隱蔽的房頂上張望做祝。 院中可真熱鬧,春花似錦鸡岗、人聲如沸混槐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽声登。三九已至,卻和暖如春炮姨,著一層夾襖步出監(jiān)牢的瞬間捌刮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工舒岸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芦圾。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓蛾派,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親个少。 傳聞我的和親對(duì)象是個(gè)殘疾皇子洪乍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

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

  • 【數(shù)組-es6】1.find() 查找符合條件的第一個(gè)元素;2.findIndex ()查找符合條件的第一個(gè)元素的...
    含含要暴怒閱讀 2,051評(píng)論 0 4
  • 檢測(cè)數(shù)組 對(duì)于一個(gè)網(wǎng)頁夜焦,或者一個(gè)全局作用域而言壳澳,使用 instanceof 操作符就能得到滿意的結(jié)果: 支持 Ar...
    林深鹿影閱讀 448評(píng)論 0 0
  • @[toc] JS數(shù)組方法 數(shù)組是 js 中最常用到的數(shù)據(jù)集合,其內(nèi)置的方法有很多茫经,熟練掌握這些方法巷波,可以有效...
    Shiyouzhang閱讀 395評(píng)論 0 0
  • 數(shù)組的方法有數(shù)組原型方法,也有從object對(duì)象繼承來的方法卸伞,下面就介紹一下數(shù)組常用方法:join() --...
    回到唐朝做IT閱讀 985評(píng)論 1 7
  • 1抹镊、join() (數(shù)組轉(zhuǎn)字符串) 數(shù)組轉(zhuǎn)字符串,方法只接收一個(gè)參數(shù):即默認(rèn)為逗號(hào)分隔符()荤傲。 join()實(shí)現(xiàn)重...
    _皓月__閱讀 286評(píng)論 0 1