zoukankan      html  css  js  c++  java
  • js遍历数组有多少种方法

    如果你看完了你会体会到一个人能有多无聊,这东西都能看完!!??

     

    大概js有以下几种循环遍历的方法:

    序号 方法 是否能遍历对象 备注
    1 fori循环   经典for循环,据说效率最高
    2 fori加强版   减少获取length次数,效率更高
    3
    forEach
     
    return不会终止循环,return相当于for循环里的continue
    4 forin
    可以循环数组可以循环对象;index是string类型
    5 forof   循环时候没给你传index
    6
    do While
       
    7
    while do
       
    8 map  
    return不会终止循环,return相当于for循环里的continue
    9
    filter
     
    return不会终止循环,return相当于for循环里的continue
    10
    reduce
      用来拼接字符串或者数字相加的,和其它循环不一样
    11
    entries
      写法复杂
    12 entries优化    
    13
    arr.keys() or arr.values()
       
    14 Object.keys(obj) or Object.values(obj) 可以循环数组可以循环对象;index是string类型
    15 arr.find()    
    16 arr.findIndex()    
    17 arr.every()    
      1 let arr = ['aaa','bbb','ccc']
      2 let obj = {a:'aaa',b:'bbb',c:'ccc'}
      3 let deepObj = {a:'aaa', b:{c:'ccc'}}
      4 
      5 foriFn(arr);// 经典for循环 
      6 /**
      7  * 经典for循环 据说性能最高
      8  * @param {Array} arr 
      9  */
     10 function foriFn(arr){
     11   for(let i=0; i<arr.length; i++){
     12     console.log('index :>> ', i);
     13     console.log('item :>> ', arr[i]);
     14   }
     15 }
     16       // index :>>  0
     17       // item :>>  aaa
     18       // index :>>  1
     19       // item :>>  bbb
     20       // index :>>  2
     21       // item :>>  ccc
     22 
     23 foriFnPlus(arr);// 经典for循环稍微优化一下子
     24 /**
     25  * 经典for循环 优化
     26  * 将数组的length缓存起来避免每次都取获取数组的length
     27  * @param {Array} arr 
     28  */
     29 function foriFnPlus(arr){
     30   for(let i=0,len=arr.length; i<len; i++){
     31     console.log('index :>> ', i);
     32     console.log('item :>> ', arr[i]);
     33   }
     34 }
     35       // index :>>  0
     36       // item :>>  aaa
     37       // index :>>  1
     38       // item :>>  bbb
     39       // index :>>  2
     40       // item :>>  ccc
     41 
     42 forEachFn(arr);// forEach遍历数组 return不会终止循环,return相当于for循环里的continue
     43 /**
     44  * forEach遍历数组
     45  * return不会终止循环,return相当于for循环里的continue
     46  * @param {Array} arr 
     47  */
     48 function forEachFn(arr){
     49   arr.forEach((item,index,a)=>{
     50     console.log('index :>> ', index);
     51     console.log('item :>> ', item);
     52     if(index){
     53       return;
     54     }
     55   })
     56 }
     57       // index :>>  0
     58       // item :>>  aaa
     59       // index :>>  1
     60       // item :>>  bbb
     61       // index :>>  2
     62       // item :>>  ccc
     63 
     64 /**
     65  * forin循环
     66  * 可以循环数组可以循环对象
     67  * @param {Object,Array} arr 
     68  */
     69 function forinFn(arr){
     70   for (const idx in arr) {
     71     if (arr.hasOwnProperty(idx)) {
     72       const item = arr[idx];
     73       console.log('index :>> ', idx);
     74       console.log('typeof index :>> ', typeof idx);
     75       console.log('item :>> ', item);
     76     }
     77   }
     78 }
     79 forinFn(arr)// forin循环 循环时候得到的key时字符串类型的
     80       // index :>>  0
     81       // typeof index :>>  string
     82       // item :>>  aaa
     83       // index :>>  1
     84       // typeof index :>>  string
     85       // item :>>  bbb
     86       // index :>>  2
     87       // typeof index :>>  string
     88       // item :>>  ccc
     89 forinFn(obj)//forin循环 可以遍历对象
     90       // index :>>  a
     91       // typeof index :>>  string
     92       // item :>>  aaa
     93       // index :>>  b
     94       // typeof index :>>  string
     95       // item :>>  bbb
     96       // index :>>  c
     97       // typeof index :>>  string
     98       // item :>>  ccc
     99 forinFn(deepObj)//forin循环 可以遍历对象 只遍历一层 
    100       // index :>>  a
    101       // typeof index :>>  string
    102       // item :>>  aaa
    103       // index :>>  b
    104       // typeof index :>>  string
    105       // item :>>  { c: 'ccc' }
    106 
    107 forofFn(arr)// forof循环 循环时候没有index
    108 /**
    109  * forOf循环
    110  * 没给你传index
    111  * @param {Array} arr 
    112  */
    113 function forofFn(arr){
    114   for (const item of arr) {
    115     console.log('index :>> ', arr.indexOf(item));
    116     console.log('item :>> ', item);
    117   }
    118 }
    119       // index :>>  0
    120       // item :>>  aaa
    121       // index :>>  1
    122       // item :>>  bbb
    123       // index :>>  2
    124       // item :>>  ccc
    125 
    126 doWhileFn(arr)// do While循环
    127 /**
    128  * do while循环
    129  * @param {Array} arr 
    130  */
    131 function doWhileFn(arr){
    132   do{
    133     console.log('item :>> ', arr.shift());
    134   }while(arr.length>0)
    135 }
    136       // item :>>  aaa
    137       // item :>>  bbb
    138       // item :>>  ccc
    139 whiledoFn(arr)// while do循环
    140 /**
    141  * while do 循环
    142  * @param {Array} arr 
    143  */
    144 function whiledoFn(arr) {
    145   while (arr.length>0) {
    146     console.log('item :>> ', arr.shift());
    147   }
    148 }
    149       // item :>>  aaa
    150       // item :>>  bbb
    151       // item :>>  ccc
    152 
    153 mapFn(arr)// map循环 return不会终止循环,return相当于for循环里的continue
    154 /**
    155  * map循环
    156  * return不会终止循环,return相当于for循环里的continue
    157  * @param {Array} arr 
    158  */
    159 function mapFn(arr){
    160   arr.map((v,i,a)=>{
    161     console.log('index :>> ', i);
    162     console.log('item :>> ', v);
    163     if(i){
    164       return
    165     }
    166     console.log(i);
    167   })
    168 }
    169       // index :>>  0
    170       // item :>>  aaa
    171       // 0
    172       // index :>>  1
    173       // item :>>  bbb
    174       // index :>>  2
    175       // item :>>  ccc
    176       
    177 filterFn(arr)// filter循环 return不会终止循环,return相当于for循环里的continue
    178 /*
    179  * filter循环
    180  * return不会终止循环,return相当于for循环里的continue
    181  * @param {Array} arr 
    182  */
    183 function filterFn(arr){
    184   arr.filter((v,i,a)=>{
    185     console.log('index :>> ', i);
    186     console.log('item :>> ', v);
    187     if(i){
    188       return
    189     }
    190     console.log(i);
    191   })
    192 }
    193       // index :>>  0
    194       // item :>>  aaa
    195       // 0
    196       // index :>>  1
    197       // item :>>  bbb
    198       // index :>>  2
    199       // item :>>  ccc
    200 
    201 
    202 reduceFn(arr)// reduce方法 特殊应用场景使用 和上边的循环不一样
    203 /**
    204  * reduce循环
    205  * @param {Array} arr 
    206  */
    207 function reduceFn(arr){
    208   let res = arr.reduce((i,j)=>{
    209     console.log('i :>> ', i);
    210     console.log('j :>> ', j);
    211     return i+j
    212   })
    213   console.log('res :>> ', res);
    214 }
    215       // i :>>  aaa
    216       // j :>>  bbb
    217       // i :>>  aaabbb
    218       // j :>>  ccc
    219       // res :>>  aaabbbccc
    220 
    221 entriesFn(arr)// 遍历器entries循环
    222 /**
    223  * 遍历器循环
    224  * @param {Array} arr 
    225  */
    226 function entriesFn(arr){
    227   let ets = arr.entries()
    228   
    229   let val = ets.next().value
    230   console.log('Array.isArray(val) :>> ', Array.isArray(val));
    231   console.log('val :>> ', val);
    232   console.log('index :>> ', val[0]);
    233   console.log('item :>> ', val[1]);
    234 
    235   val = ets.next().value
    236   console.log('val :>> ', val);
    237   console.log('index :>> ', val[0]);
    238   console.log('item :>> ', val[1]);
    239 
    240   val = ets.next().value
    241   console.log('val :>> ', val);
    242   console.log('index :>> ', val[0]);
    243   console.log('item :>> ', val[1]);
    244 }
    245       // Array.isArray(val) :>>  true
    246       // val :>>  [ 0, 'aaa' ]
    247       // index :>>  0
    248       // item :>>  aaa
    249       // val :>>  [ 1, 'bbb' ]
    250       // index :>>  1
    251       // item :>>  bbb
    252       // val :>>  [ 2, 'ccc' ]
    253       // index :>>  2
    254       // item :>>  ccc
    255 entriesFnPlus(arr)// 遍历器entries循环优化
    256 /**
    257  * 遍历器循环简化版
    258  * @param {Array} arr 
    259  */
    260 function entriesFnPlus(arr){
    261   let ets = arr.entries()
    262   let nxt=ets.next(),val
    263   while(!nxt.done){
    264     val = nxt.value
    265     console.log('Array.isArray(val) :>> ', Array.isArray(val));
    266     console.log('val :>> ', val);
    267     console.log('index :>> ', val[0]);
    268     console.log('item :>> ', val[1]);
    269     nxt = ets.next()
    270   }
    271 }
    272       // Array.isArray(val) :>>  true
    273       // val :>>  [ 0, 'aaa' ]
    274       // index :>>  0
    275       // item :>>  aaa
    276       // Array.isArray(val) :>>  true
    277       // val :>>  [ 1, 'bbb' ]
    278       // index :>>  1
    279       // item :>>  bbb
    280       // Array.isArray(val) :>>  true
    281       // val :>>  [ 2, 'ccc' ]
    282       // index :>>  2
    283       // item :>>  ccc
    284 
    285 keysValuesFn(arr)// 用数组的 arr.keys() arr.values() 方法遍历
    286 /**
    287  * 利用数组keys values属性的循环
    288  * @param {Array} arr 
    289  */
    290 function keysValuesFn(arr){
    291   for (const index of arr.keys()) {
    292     console.log('index :>> ', index);
    293   }
    294   for (const item of arr.values()) {
    295     console.log('item :>> ', item);
    296   }
    297 }
    298       // index :>>  0
    299       // index :>>  1
    300       // index :>>  2
    301       // item :>>  aaa
    302       // item :>>  bbb
    303       // item :>>  ccc
    304 
    305 ObjectKeysValuesFn(arr)//  用对象的 Object.keys(arr)、Object.values(arr)方法返回的字符串数组 遍历
    306       // index :>>  0
    307       // index :>>  1
    308       // index :>>  2
    309       // item :>>  aaa
    310       // item :>>  bbb
    311       // item :>>  ccc
    312 ObjectKeysValuesFn(obj)// 可以遍历对象
    313       // index :>>  a
    314       // index :>>  b
    315       // index :>>  c
    316       // item :>>  aaa
    317       // item :>>  bbb
    318       // item :>>  ccc
    319 ObjectKeysValuesFn(deepObj)// 可以遍历对象 只遍历一层
    320       // index :>>  a
    321       // index :>>  b
    322       // item :>>  aaa
    323       // item :>>  { c: 'ccc' }
    324 /**
    325  * 利用对象keys values属性的循环
    326  * @param {Object} arr 
    327  */
    328 function ObjectKeysValuesFn(arr){
    329   for (const index of Object.keys(arr)) {
    330     console.log('index :>> ', index);
    331   }
    332   for (const item of Object.values(arr)) {
    333     console.log('item :>> ', item);
    334   }
    335 }
    336 
    337 findFn(arr)// 用数组的 arr.find() 方法遍历
    338 /**
    339  * find 循环
    340  * @param {Array} arr 
    341  */
    342 function findFn(arr){
    343   arr.find((v,i,a)=>{
    344     console.log('index :>> ', i);
    345     console.log('item :>> ', v);
    346   })
    347 }
    348       // index :>>  0
    349       // item :>>  aaa
    350       // index :>>  1
    351       // item :>>  bbb
    352       // index :>>  2
    353       // item :>>  ccc
    354 
    355 
    356 findIndexFn(arr)// 用数组的 arr.findIndex() 方法遍历
    357 /**
    358  * findIndex 循环
    359  * @param {Array} arr 
    360  */
    361 function findIndexFn(arr){
    362   arr.findIndex((v,i,a)=>{
    363     console.log('index :>> ', i);
    364     console.log('item :>> ', v);
    365   })
    366 }
    367       // index :>>  0
    368       // item :>>  aaa
    369       // index :>>  1
    370       // item :>>  bbb
    371       // index :>>  2
    372       // item :>>  ccc

    over

  • 相关阅读:
    15、Go语言基础之并发
    14、Go语言基础之反射
    13、Go语言基础之接口
    12、Go语言基础之包
    Golang ECHO中间件【10】
    Golang ECHO文件上传【9】
    关于数据治理的收获
    Java内存模型(JMM)和虚拟机(JVM)内存、GC
    图的m着色问题
    矩阵链乘法
  • 原文地址:https://www.cnblogs.com/rainbowLover/p/13269993.html
Copyright © 2011-2022 走看看