1.for
for循环是最传统的,最简单的遍历方式,也是实用效率最高的。
var arr = [1,2,3,4,5]
for(var i = 0;i<arr.length;i++){
//代码块
};
优化:
// 缓存数组长度,避免重复计算,
var arr = [1,2,3,4,5];
var len ;
for(var i = 0;i<len;i++){
//代码块
};
2.forEach
var arr5 = [10,20,30]
var result5 = arr5.forEach((item,index,arr)=>{
console.log(item)
})
console.log(result5)
没有返回值。
3.for...in
遍历对象除Symbol意外的可枚举数据,包括继承。
var arr = [1,2,3,4,5]
for(var i in arr){
console.log(i,arr[i])
} //这里的i是对象属性,也就是数组的下标
4.for...of
不能遍历对象
let arr=[1,2,3];
for (let item of arr){
console.log(item)
}
//遍历对象可以这样搭配Object.keys使用
let obj = {tatle:1,value:2}
for(let item of Object.keys(obj)){
console.log(person[item])
}
5.map
遍历数组,返回值是修改后的数组
let arr=[1,2,3];
const res = arr.map(item=>{
return item+1
});
console.log(res) //[2,3,4]
console.log(arr) // [1,2,3]
6.every
对数组中的每一运行给定的函数,如果该函数对每一项都返回true,则该函数返回true;
var arr = [10,30,25,64,18,3,9]
var result = arr.every((item,index,arr)=>{
return item>3
})
console.log(result) //false
7.some
对数组中的每一项运行给定的函数,如果该函数有一项返回true,就返回true,所有项返回false才返回false;
var arr2 = [10,20,32,45,36,94,75]
var result2 = arr2.some((item,index,arr)=>{
return item<10
})
console.log(result2) //false
8.filter
对数组中的每一运行给定的函数,会返回满足该函数的项组成的数组
var arr3 = [3,6,7,12,20,64,35]
var result3 = arr3.filter((item,index,arr)=>{
return item > 3
})
console.log(result3) //[6,7,12,20,64,35]
性能问题可以用测试工具测试,也可自己写测试函数。
//测试函数
function clecTime(fn){
const start = new Date().getTime()
if(fn) fn()
const end = new Date().getTime()
console.log(`执行耗时:${end-start}ms`)
}
经过工具与手动测试发现,结果基本一致,数组遍历各个方法的速度:传统的for循环最快,for-in最慢
for
>
for-of>
forEach>
map>
for-in