js中數(shù)組是比較常用的對(duì)象,同時(shí)js中的數(shù)組也十分的靈活。
一. 創(chuàng)建數(shù)組的方式
-
字面量數(shù)組
var arr=[1,2,3,4] -
使用Array構(gòu)造函數(shù)
var arr=new Array()//創(chuàng)建了一個(gè)空數(shù)組 var arr=new Array(6)//[undefined × 6] arr.length//6 用Array創(chuàng)建數(shù)組時(shí),當(dāng)里面的參數(shù)只有一個(gè)時(shí),表示的是數(shù)組的長(zhǎng)度. var arr=new Array(1,2,3)//[1, 2, 3] arr.length //3 arr[0] //1 arr[1] //2 arr[2] //3 用Array創(chuàng)建數(shù)組時(shí),當(dāng)里面的參數(shù)不止一個(gè)時(shí),里面的參數(shù)代表的是數(shù)組的值
二. 數(shù)組的屬性length
-
length屬性表示的是一個(gè)數(shù)組的長(zhǎng)度,即數(shù)組中元素的個(gè)數(shù)
數(shù)組中的每個(gè)元素都有一個(gè)索引號(hào),而且索引號(hào)是從0開(kāi)始。 var arr=[1,2,3,4,5] console.log(arr.length)//5 arr[0]// 1 數(shù)組的第一個(gè)元素,索引號(hào)從0開(kāi)始。 arr[4]//5 數(shù)組的最后一個(gè)元素,索引號(hào)為length-1; 正是因?yàn)樗饕?hào)從0開(kāi)始,所以一個(gè)數(shù)組的上、下限分別為0和length-1 -
js中l(wèi)ength屬性是可變的
arr.length=6//增大數(shù)組的長(zhǎng)度 console.log(arr.length)//6
三、 數(shù)組的添加和刪除
(1)push():在一個(gè)數(shù)組的最后一個(gè)元素后面添加元素,這個(gè)方法會(huì)改變?cè)瓟?shù)組
var arr=[1,2,3,4]
var newarr=arr.push(0)//在arr數(shù)組的后面加上0這個(gè)值。
console.log(newarr)//這個(gè)輸出的結(jié)果是5,因?yàn)檩敵龅氖羌尤?后這個(gè)數(shù)組的長(zhǎng)度。
console.log(arr)//[1, 2, 3, 4, 0]用push()添加元素后,原來(lái)的數(shù)組改變了
(2)pop():刪除數(shù)組的最后一個(gè)元素,這個(gè)方法也會(huì)改變?cè)瓟?shù)組。
var arr=[1,2,3,4]
var newarr=arr.pop()//刪除數(shù)組的最后一個(gè)元素
console.log(newarr)//4,返回的是要?jiǎng)h除的這個(gè)元素的值。
console.log(arr)//[1,2,3] 原數(shù)組改變了。
(3)unshift():向數(shù)組頭部添加一個(gè)元素,會(huì)改變?cè)瓟?shù)組
var arr=[1,2,3,4]
var newarr=arr.unshift(0);在數(shù)組的頭部添加0這個(gè)元素。
console.log(newarr)//5,和push方法一樣,返回的是改變后的數(shù)組的長(zhǎng)度。
console.log(arr)//[0, 1, 2, 3, 4]
(4)shift():刪除數(shù)組的頭部元素,會(huì)改變?cè)瓟?shù)組
var arr=[1,2,3,4]
var newarr=arr.shift()
console.log(newarr)//1,和pop方法一樣,返回的是刪除的元素的值。
console.log(arr)//[2, 3, 4]
這四個(gè)方法都是用于對(duì)數(shù)組的刪除和添加的,但是只能在數(shù)組的頭部和尾部添加和刪除,而且這四個(gè)方法都會(huì)改變?cè)瓟?shù)組
(5)splice():用于對(duì)數(shù)組的插入和刪除,而且不限于在數(shù)組的尾部和首部添加和刪除,同樣也會(huì)改變?cè)瓟?shù)組,返回一個(gè)由刪除元素組成的新數(shù)組,沒(méi)有刪除則返回空數(shù)組-
當(dāng)在splice(a,b)里傳入兩個(gè)參數(shù)時(shí),可以實(shí)現(xiàn)數(shù)組元素的刪除.其中a參數(shù)表示的是絕對(duì)索引值,b參數(shù)表示的是而是刪除動(dòng)作執(zhí)行的次數(shù)。
var arr=[1,2,3,4,5]
arr.splice(2,3)//[3, 4, 5],返回的是由刪除元素組成的新數(shù)組,splice(2,3) 表示從索引號(hào)為2的這個(gè)元素開(kāi)始刪除的動(dòng)作執(zhí)行3次,所以刪除的是3,4,5,這幾個(gè)元素。
console.log(arr)//[1,2] 當(dāng)在splice(a,b,val)中傳入三個(gè)參數(shù)時(shí),可以實(shí)現(xiàn)數(shù)組的插入與替換,其中val表示的是插入的值。
-
當(dāng)?shù)诙€(gè)參數(shù)為0時(shí),表示插入,不刪除原數(shù)組的任何元素。
var arr=[1,2,3,4,5] arr.splice(1,0,4)//[]沒(méi) 有刪除所以返回一個(gè)空數(shù)組。 console.log(arr)//[1, 4, 2, 3, 4, 5],元素組被改變,在索引號(hào)為1的元素前面插入了值為4的元素。 -
當(dāng)?shù)诙€(gè)參數(shù)不為0時(shí),表示先刪除在插入,及我們平常所說(shuō)的替換。
var arr=[1,2,3,4,5] arr.splice(1,1,5)//[1]返回有刪除的元素組成的新數(shù)組。 console.log(arr)//[1, 5, 3, 4, 5],把索引號(hào)為1的元素刪除,然后把值為5的元素加入進(jìn)去,也就是5替換了原來(lái)的2. -
有了splice()方法后,我們可以用splice()方法分別實(shí)現(xiàn)上面的push()、pop()、unshift().shift()等方法。
-
用splice實(shí)現(xiàn)push()
function push(arr,val) { arr.splice(arr.length,0,val) return arr } var arr=[1,2,3,4] push(arr,val)//[1, 2, 3, 4, 5] -
用splices實(shí)現(xiàn)pop()
function pop(arr) { var b=arr.splice(arr.length-1,1)[0] console.log(arr) } var arr=[1,2,3,4] push(arr,val)//[1, 2, 3] -
用splice實(shí)現(xiàn)unshift();
function unshift(arr,val) { arr.splice(0,0,val) console.log(arr); } var arr=[1,2,3,4] unshift(arr,0)// [0, 1, 2, 3, 4] -
用splice實(shí)現(xiàn)shift();
function shift(arr) { arr.splice(0,1); return arr; } var arr=[1,2,3,4] shift(arr)//[2, 3, 4]
-
四、數(shù)組的其他操作
- join():是把數(shù)組元素使用參數(shù)作為連接符連接成一字符串,不會(huì)修改原數(shù)組內(nèi)容
var arr=["hello","jirengu","my","name"]
arr.join(" ");//"hello jirengu my name"
console.log(arr)//["hello", "jirengu", "my", "name"] - sort():sort方法用于對(duì)數(shù)組進(jìn)行排序,會(huì)改變?cè)瓟?shù)組。
- slice(start,end):用于返回?cái)?shù)組中的一個(gè)片段或子數(shù)組。不會(huì)改變?cè)瓟?shù)組,而是返回一個(gè)新數(shù)組。
var arr=[1,2,3,4]
arr.slice(1,2)//[2]
console.log(arr)//[1,2,3,4] - concat(array):用于拼接數(shù)組,
var arr1=[1,2,3,4]
var arr2=[5,6,7,8]
var arr3=arr1.concat(arr2)
console.log(arr3);//[1, 2, 3, 4, 5, 6, 7, 8] - Array.isArray(obj):這是ES5中的方法,用于判斷一個(gè)對(duì)象是不是數(shù)組。
var a=[1,2,3]
var b=function() {console.log('1')};
console.log(Array.isArray(a));//true
console.log(Array.isArray(b));//false - indexOf(element):這是ES5中的方法,用于查找數(shù)組內(nèi)指定元素位置,查到第一個(gè)后放回其索引,沒(méi)有找到就返回-1;
var arr1=['a','b','c','d','a','e']
console.log(arr1.indexOf('a'))//0 - forEach(ele,index,arr):這是ES5中的方法,用于遍歷數(shù)組。參數(shù)為一個(gè)回調(diào)函數(shù),回調(diào)函數(shù)中有三個(gè)參數(shù)。
var arr1=['a','b','c','d','a','e']
arr1.forEach(function(e,idx,array) {
array[idx]=e.toUpperCase();
});
console.log(arr1)//"A", "B", "C", "D", "A", "E"]