JS中的遍历方法总结
method summary
在日常开发中,对数据的处理用得最多的就是对数据进行遍历。对于遍历的方法,最主要的包括了以下几种:
for、for-in、forEach和for-of
1
for:最原始的遍历方法
在JS的语法中,for使用continue和break可以跳出本次循环和退出循环
for(let i=0;i<5;i++){for(let j=0;j<4;j++){console.log(i,j)//continue:跳出本次循环//break:跳出循环}}
2forEach:简化for操作
由于for的写法比较繁琐,所以在JS使用场景中可以使用数据内置的forEach方法,来简化数组遍历操作。
但由于forEach每次循环实际上是一个回调函数,因此在函数内部无法用continue和break跳出循环,但可以用return达到continue(跳出本次)的效果。也可以用抛出错误的方法退出循环
let arry=[1,2,4,5]arry.forEach((item,index)=>{console.log(item,index)//item为遍历的数据,idex为数据下标})//returnarry.forEach(item=>{if(item===2){return;//跳出本次循环 }}//异常,退出循环arry.forEach(item=>{ throw new Error() // 退出循环}}
3for-in:多为对象遍历设计
for-in主要为遍历对象而设计,也可以遍历数组的键名。它的特点就是无论遍历数组还是对象时返回值为key或者下标。
但由于for-in不仅会搜索实例属性,还会搜索原型属性,因此相比于其他循环方式,for-in的速度较慢,效率会相对地较低。
还有一点值得注意:for-in遍历是不能保证遍历的顺序的。
var arr = new Array(10000)for(var i=0;i< 10000;i++){ arr[i]=i}var length = arr.lengthconsole.time('for')for (var index=0; index< length; index++){ // }console.timeEnd('for')console.time('for-in')for(var index in arr){ //}console.timeEnd('for-in')// for:0.2839ms// for-in: 1.1479ms
4
for-of:最优选择
for-of相对以上的三种遍历方法有着绝对的优势;
1、有着for-in一样简单的语法,但没有for-in的缺点
2、不同于forEach,for-of可以使用break和continue跳出循环
3、提供了遍历所有数据结构的统一操作接口
4、不仅支持对象和数组的遍历,for-of支持一切可迭代对象的遍历,包括类数组、字符串的遍历;它将字符串视为一系列Unicode字符来遍历。
但需要注意,普通对象不是可迭代对象,不能用for-of遍历。想要迭代一个对象,可以用for-in,也可以将对象使用Map数据结构。