數(shù)組的長(zhǎng)度
Array.length
var arr = [1,2,3];
console.log(arr.length); //3
數(shù)組的操作方法
插入和刪除
- 從數(shù)組尾部開始
Array.push(); 從數(shù)組的尾部插入
Array.pop(); 從數(shù)組的尾部刪除,返回值是刪除的元素
例子
var arr = [1,2];
console.log(arr.push(5)); //3
console.log(arr); //[1,2,5]
console.log(arr.pop()); //5
console.log(arr); //[1,2]
- 從數(shù)組頭部開始
Array.unshift() 數(shù)組第一位插入烂翰,返回?cái)?shù)組長(zhǎng)度
Array.shift() 數(shù)組第一位刪除童叠,返回值是刪除的值
例子
var arr = [1,2];
console.log(arr.unshift(5)); //3
console.log(arr); //[5, 1, 2]
console.log(arr.shift()); //5
console.log(arr); //[1,2]
- 任意位置插入聘惦,修改和刪除
Array.splice() 一次性解決數(shù)組添加/刪除(這兩種方法一結(jié)合就可以達(dá)到替換效果)
splice()
方法有三個(gè)參數(shù)
- 開始索引(在數(shù)組中的對(duì)應(yīng)索引)
- 刪除元素的位移痢掠,即長(zhǎng)度,如果是插入和替換則為0
- 插入的新元素嘀趟,可以多個(gè),也可以不寫
splice()
方法返回一個(gè)由刪除元素組成的新數(shù)組她按,沒有則返回空數(shù)組
- 刪除
var arr = [1,2,5,6,8,10];
console.log(arr.splice(1,3)); //執(zhí)行刪除操作牛隅,[2,5,6]
console.log(arr); //[1,8,10]
- 插入
var arr = [1,2,5,6,8,10];
console.log(arr.splice(0,0,2,5,6)); //執(zhí)行插入,返回值為[]
console.log(arr); //[1,2,5,6,8,10]
- 替換(先刪除再替換)
var arr = [1,2,5,6,8,10];
console.log(arr.splice(1,1,4));//執(zhí)行替換酌泰,返回值為[2]
console.log(arr); //[1, 4, 5, 6, 8, 10]
數(shù)組的其他方法
-
Array.join(char)
把數(shù)組元素使用參數(shù)作為連接符連接成一個(gè)字符串,不會(huì)修改原數(shù)組內(nèi)容
var arr = [1,2,3,4,5,6,7,8];
console.log(arr.join("|")); //"1|2|3|4|5|6|7|8"
-
Array.slice(start,end)
用于返回?cái)?shù)組中一個(gè)片段或子數(shù)組- 如果只寫一個(gè)參數(shù)默伍,則返回參數(shù)到數(shù)組結(jié)束部分
- 如果參數(shù)出現(xiàn)負(fù)數(shù),則從數(shù)組尾部計(jì)數(shù)
- 如果start>end衰琐,返回空數(shù)組
- 不會(huì)改變?cè)瓟?shù)組也糊,返回一個(gè)新的數(shù)組
var arr = [1,2,3,4,5,6,7,8];
console.log(arr.slice(2)); //[3, 4, 5, 6, 7, 8]
console.log(arr.slice(1,3)); //[2, 3]
console.log(arr.slice(3,3)); //[]
console.log(arr.slice(4,3)); //[]
console.log(arr.slice(4,-3)); //[5]
console.log(arr); //[1, 2, 3, 4, 5, 6, 7, 8]
-
Array.concat(array)
用于拼接數(shù)組,a.concat(b)
返回一個(gè)有a和b共同組成的新數(shù)組羡宙,不會(huì)修改原數(shù)組,也不會(huì)遞歸鏈接數(shù)組內(nèi)部數(shù)組
var arr1 = [1,2,3,4,5,6,7,8];
var arr2 = [100,200,300];
console.log(arr1.concat(arr2)); //[1, 2, 3, 4, 5, 6, 7, 8, 100, 200, 300]
console.log(arr2.concat(arr1)); //[100, 200, 300, 1, 2, 3, 4, 5, 6, 7, 8]
-
Array.reverse()
將數(shù)組逆序辛辨,會(huì)修改原數(shù)組
var arr = [1,2,3,4,5,6,7,8];
console.log(arr.reverse()); //[8, 7, 6, 5, 4, 3, 2, 1]
console.log(arr); //[8, 7, 6, 5, 4, 3, 2, 1]
-
Array.sort()
用于對(duì)數(shù)組排序- 當(dāng)沒有參數(shù)的時(shí)候會(huì)按字母表升序排列瑟枫,含有undefined會(huì)被排到最后,對(duì)象元素會(huì)調(diào)用toString方法
- 如果按照自定義方式排序慷妙,可以傳一個(gè)排序方法進(jìn)去
- 會(huì)改變?cè)瓟?shù)組
var arr = [1,5,3,4,8,9,6,10];
console.log(arr.sort(function(v1,v2){
return v1-v2;
})); //[1, 3, 4, 5, 6, 8, 9, 10]
console.log(arr); //[1, 3, 4, 5, 6, 8, 9, 10]
console.log(arr.sort()); //[1, 10, 3, 4, 5, 6, 8, 9]
console.log(arr); //[1, 10, 3, 4, 5, 6, 8, 9]
ES5數(shù)組拓展
-
Array.isArray(obj)
這是Array對(duì)象的一個(gè)靜態(tài)函數(shù),用來判斷一個(gè)對(duì)象是不是數(shù)組
var a = [];
var b = {};
console.log(Array.isArray(a)); //true
console.log(Array.isArray(b)); //false
-
.indexOf(element) / .lastIndexOf(element)
這兩個(gè)方法用于查找數(shù)組內(nèi)指定元素位置虑啤,查找到第一個(gè)后返回其索引,沒有查找到返回-1狞山,indexOf從頭至尾搜索,lastIndexOf反向搜索
var arr = [1,8,5,4,1,2,3,4];
console.log(arr.indexOf(2)); //5
console.log(arr.indexOf(6)); //-1
-
.forEach(function(element, index, array))
遍歷數(shù)組萍启,參數(shù)是一個(gè)回調(diào)函數(shù)
回調(diào)函數(shù)有三個(gè)參數(shù)- 當(dāng)前元素
- 當(dāng)前元素的索引
- 整個(gè)數(shù)組
var arr = [1,8,5,4,1,2,3,4];
arr.forEach(function(e,index){
console.log(e);
});
//1,8,5,4,1,2,3,4
-
.every(function(element, index, array)) / .some(function(element, index, array))
邏輯判定,回調(diào)函數(shù)返回一個(gè)布爾值
回調(diào)函數(shù)有三個(gè)參數(shù)- 當(dāng)前元素
- 當(dāng)前元素的索引
- 整個(gè)數(shù)組
- every是所有函數(shù)的每個(gè)回調(diào)函數(shù)都返回true的時(shí)候才會(huì)返回true勘纯,當(dāng)遇到false的時(shí)候終止執(zhí)行,返回false驳遵,類似
&&
- some函數(shù)是“存在”有一個(gè)回調(diào)函數(shù)返回true的時(shí)候終止執(zhí)行并返回true,否則返回false唆迁,類似
||
var arr = [1,8,5,4,1,2,3,4];
console.log(arr.every(function(e,index){
return e > 5;
})); //false
console.log(arr.some(function(e,index){
return e > 5;
})); //true
-
.map(function(element))
遍歷數(shù)組,回調(diào)函數(shù)返回值組成一個(gè)新數(shù)組返回媒惕,新數(shù)組索引結(jié)構(gòu)和原數(shù)組一致来庭,原數(shù)組不變
var arr = [1,8,5,4,1,2,3,4];
console.log(arr.map(function(e){
return e;
})); //[1, 8, 5, 4, 1, 2, 3, 4]
console.log(arr.map(function(e){
return e*2;
})); //[2, 16, 10, 8, 2, 4, 6, 8]
console.log(arr); //[1, 8, 5, 4, 1, 2, 3, 4]
-
.filter(function(element))
返回?cái)?shù)組的一個(gè)子集,回調(diào)函數(shù)用于邏輯判斷是否返回月弛,返回true則把當(dāng)前元素加入到返回?cái)?shù)組中,false則不加帽衙。簡(jiǎn)單來說是篩選功能菜皂,符合條件的元素加入到返回?cái)?shù)組厉萝,不符合元素不加。
新數(shù)組只包含返回true的值谴垫,索引缺失的不包括,原數(shù)組保持不變
var arr = [1,2,3,4,-5,-6,-7,-10];
console.log(arr.filter(function(e){
return e>0;
})); //[1, 2, 3, 4]
console.log(arr); //[1,2,3,4,-5,-6,-7,-10]
-
.reduce(function(v1,v2),value)/reduceRight(function(v1,v2),value)
遍歷數(shù)組翩剪,調(diào)用回調(diào)函數(shù),將數(shù)組元素組合成一個(gè)值前弯,reduce()
從索引最小值開始,reduceRight()
反向開始reduce()
方法有兩個(gè)參數(shù)- 回調(diào)函數(shù)恕出,將兩個(gè)值合為一個(gè),返回結(jié)果
- value初始值剃根,可選
var arr = [1,2,3,4,-5,-6,-7,-10];
console.log(arr.reduce(function(v1,v2){
return v1+v2;
})); //-18
console.log(arr.reduce(function(v1,v2){
return v1*v2;
})); //50400
console.log(arr.reduce(function(v1,v2){
return v1*v2;
},0)); //0