創(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()使用一樣器虾,只不過是從后往前遍歷讯嫂。