先創(chuàng)建一個數(shù)組arr為例子
let arr=[1,2,3,2,4]
ES5中遍歷方法
for
for(let i=0;i<arr.length;i++){
if(arr[i]==2){
break //支持break挂谍,continue
}
console.log(arr[i])
}
輸出結果是:1
當arr[i]為2的時候停止循環(huán)輸出
forEach
arr.forEach(function(elem,index,array){
if(arr[i]==2){
continue //報錯史侣,不支持break潮太,continue
}
console.log(elem,index,array)
});
輸出結果是:報錯 该园,原因是不支持break和continue語法
forEach后面的三個參數(shù)分別為當前正在遍歷對象然低,索引鹿蜀,數(shù)組
map
let result=arr.map(function(value){
value +=1
return value
// console.log(value);
})
console.log(arr,result)
輸出結果是:[1, 2, 3, 2, 4]庵佣,[2, 3, 4, 3, 5]
map返回值會返回新數(shù)組,不會改變原數(shù)組元素
filter
let result=arr.filter(function(value){
return value == 2
})
console.log(arr,result);
輸出結果是:[1, 2, 3, 2, 4]婿斥,[2, 2]
filter返回值會返回符合條件篩選過濾后的新數(shù)組
some
let result=arr.some(function(value){
// console.log(value);
return value == 4
})
console.log(arr,result);
輸出結果是:[1, 2, 3, 2, 4]劝篷,true
some是篩選數(shù)組中是否有符合條件的數(shù),返回布爾型值民宿,找到一個符合條件的就返回true娇妓,一個都找不到返回false
every
let result=arr.every(function(value){
// console.log(value);
return value == 2
})
console.log(arr,result);
輸出結果是:[1, 2, 3, 2, 4],false
every檢測每個元素是否符合條件活鹰,返回布爾型值哈恰,每個都符合返回true,否則返回false志群,與some相反
reduce
可用于數(shù)組求和
let sum=arr.reduce(function(prev,cur,index,arr){
return prev+cur
// console.log(value);
},0)
console.log(arr,sum);
輸出結果是:[1, 2, 3, 2, 4]着绷,12
reduce接受一個函數(shù)作為累加器,第一個參數(shù)是方法锌云,第二個參數(shù)是初始值荠医,prev代表上一個值(從初始值開始),cur代表當前處理值桑涎,index索引彬向,arr數(shù)組,返回一個新數(shù)組
可用于求數(shù)組中的最大值
let max=arr.reduce(function(prev,cur){
return Math.max(prev,cur)
// console.log(value);
},0)
console.log(arr,max);
輸出結果是:[1, 2, 3, 2, 4]攻冷,4
使用Math.max方法
可用于求數(shù)組去重
let res=arr.reduce(function(prev,cur){
prev.indexOf(cur) == -1 && prev.push(cur)
return prev
},[])
console.log(arr,res);
輸出結果是:[1, 2, 3, 2, 4]娃胆,[1, 2, 3, 4]
初始值為空數(shù)組,prev.indexOf(cur)當前數(shù)組是否包含正在處理的值,不包含則放入新數(shù)組中
for...in
Array.prototype.foo=function(){
console.log('haha');
}
for(let index in arr){
console.log(index,arr[index]);
}
輸出結果是:
0 1
1 2
2 3
3 2
4 4
foo ? () {
console.log('haha');
}
PS:從輸出結果可以看出等曼,for...in在數(shù)組原型下自定義一個方法時也能遍歷出來里烦,因此不建議使用此方法來遍歷數(shù)組
ES6中遍歷方法
find
let res=arr.find(function(value){
return value == 2
})
console.log(arr,res);
輸出結果是:[1, 2, 3, 2, 4],2
find是返回第一個通過測試的元素涉兽,沒有找到元素返回undefined
findIndex
let res=arr.findIndex(function(value){
return value == 2
})
console.log(arr,res);
輸出結果是:[1, 2, 3, 2, 4]招驴,1
find是返回第一個通過測試的元素的下標篙程,第一個符合value等于2的下標是第二個元素枷畏,返回值為它的下標1
for...of
for(let item of arr){
console.log(item);
}
for(let item of arr.values()){
console.log(item);
}
for(let item of arr.keys()){
console.log(item);
}
for(let [index,item] of arr.entries()){
console.log(index,item);
}
第一和第二個輸出結果是:1,2,3,2,4
第三個輸出結果是0,1,2,3,4
第四個輸出結果是 下標+元素
for...of遍歷的多種寫法如上代碼顯示