-
Array.isArray(obj)
這是Array對象的一個靜態(tài)函數(shù),用來判斷一個對象是不是數(shù)組
var a = [1,2,3];
var b = new Date();
console.log(Array.isArray(a)); //true
console.log(Array.isArray(b)); //false
-
indexOf
indexOf方法返回給定元素在數(shù)組中第一次出現(xiàn)的位置衙解,如果沒有出現(xiàn)則返回-1粗卜。
indexOf方法還可以接受第二個參數(shù),表示搜索的開始位置。
var a = ['a', 'b', 'c'];
console.log(a.indexOf('b')) // 1
console.log(a.indexOf('y')) // -1
['a', 'b', 'c'].indexOf('a', 1) // -1 從1號位置開始搜索字符a踱启,結(jié)果為-1,表示沒有搜索到研底。
-
lastIndexOf
lastIndexOf方法返回給定元素在數(shù)組中最后一次出現(xiàn)的位置埠偿,如果沒有出現(xiàn)則返回-1。
var a = [1,2,3,3,2,1]
console.log(a.indexOf(2)) //1
console.log(a.lastIndexOf(2)) //4
注意榜晦,這兩個方法不能用來搜索NaN的位置冠蒋,即它們無法確定數(shù)組成員是否包含NaN。
-
map
map方法將數(shù)組的所有成員依次傳入?yún)?shù)函數(shù)乾胶,然后把每一次的執(zhí)行結(jié)果組成一個新數(shù)組返回抖剿。
var a = [1, 2, 3, 4, 5, 6]
console.log(a.map(function(e){
return e * e
})) // [1, 4, 9, 16, 25, 36]
console.log(a) //[1, 2, 3, 4, 5, 6]
上面代碼中,a數(shù)組的所有成員依次執(zhí)行參數(shù)函數(shù)识窿,運行結(jié)果組成一個新數(shù)組返回斩郎,原數(shù)組沒有變化。
map方法接受一個函數(shù)作為參數(shù)喻频。該函數(shù)調(diào)用時缩宜,map方法向它傳入三個參數(shù):當前成員、當前位置和數(shù)組本身。
[1, 2, 3].map(function(elem, index, arr) {
return elem * index;
});
// [0, 2, 6]
上面代碼中锻煌,map方法的回調(diào)函數(shù)有三個參數(shù)妓布,elem為當前成員的值,index為當前成員的位置宋梧,arr為原數(shù)組([1, 2, 3])匣沼。
-
forEach
forEach也是對數(shù)組的所有成員依次執(zhí)行參數(shù)函數(shù)。遍歷數(shù)組乃秀,參數(shù)為一個回調(diào)函數(shù)肛著,回調(diào)函數(shù)有三個參數(shù):
1.當前元素
2.當前元素索引值
3.整個數(shù)組
var a = [1,2,3,4,5,6];
console.log(a.map(function(e){return e+1}));//[2, 3, 4, 5, 6, 7]
console.log(a); //[1, 2, 3, 4, 5, 6];
a.forEach(function(e,i,array){
array[i]= e + 1;
});
console.log(a); //[2, 3, 4, 5, 6, 7]
forEach方法不返回值,只用來操作數(shù)據(jù)跺讯。這就是說枢贿,如果數(shù)組遍歷的目的是為了得到返回值,那么使用map方法刀脏,否則使用forEach方法
-
every()局荚、some()
返回布爾值诱建,表示判斷數(shù)組成員是否符合某種條件栈戳。
它們接受一個函數(shù)作為參數(shù)魏保,所有數(shù)組成員依次執(zhí)行該函數(shù)黍檩。該函數(shù)接受三個參數(shù):當前成員、當前位置和整個數(shù)組渣磷,然后返回一個布爾值厉膀。
some方法是只要一個成員的返回值是true兰吟,則整個some方法的返回值就是true杭跪,否則返回false仙逻。
every方法是所有成員的返回值都是true,整個every方法才返回true涧尿,否則返回false系奉。
var a = [1, 2, 3, 4, 5, 6]
console.log(a.every(function(e, i, arr){
return e < 5
})) //false
console.log(a.some(function(e,i,arr){
return e > 4
})) //true
-
filter
filter方法用于過濾數(shù)組成員,滿足條件的成員組成一個新數(shù)組返回姑廉。
它的參數(shù)是一個函數(shù)缺亮,所有數(shù)組成員依次執(zhí)行該函數(shù),返回結(jié)果為true的成員組成一個新數(shù)組返回桥言。該方法不會改變原數(shù)組萌踱。
var a = [1, 2, 3, 4, 5, 6]
console.log(a.filter(function(e){
return e % 2 == 0;
})) // [2, 4, 6]
console.log(a) //[1, 2, 3, 4, 5, 6]
-
reduce、reduceRight
reduce方法和reduceRight方法依次處理數(shù)組的每個成員号阿,最終累計為一個值虫蝶。
reduce是從左到右處理(從第一個成員到最后一個成員),reduceRight則是從右到左(從最后一個成員到第一個成員)倦西。
有兩個參數(shù):
1.回調(diào)函數(shù):把兩個值合為一個,返回結(jié)果
2.value赁严,一個初始值,可選
[1, 2, 3, 4, 5].reduce(function (a, b) {
console.log(a, b);
return a + b;
})
// 1 2
// 3 3
// 6 4
// 10 5
//最后結(jié)果:15
上面代碼中扰柠,reduce方法求出數(shù)組所有成員的和粉铐。第一次執(zhí)行,a是數(shù)組的第一個成員1卤档,b是數(shù)組的第二個成員2蝙泼。第二次執(zhí)行,a為上一輪的返回值3劝枣,b為第三個成員3汤踏。第三次執(zhí)行,a為上一輪的返回值6舔腾,b為第四個成員4溪胶。第四次執(zhí)行,a為上一輪返回值10稳诚,b為第五個成員5哗脖。至此所有成員遍歷完成,整個方法的返回值就是最后一輪的返回值15扳还。
var a = [1, 2, 3, 4, 5, 6]
var b = a.reduce(function(v1, v2){ return v1 + v2 }, 100)
console.log(b) // 121
上面代碼指定參數(shù)a的初值為100才避,所以數(shù)組從100開始累加,最終結(jié)果為121氨距。注意桑逝,這時b是從數(shù)組的第一個成員開始遍歷。
參考鏈接
以上大量參考 Array 對象