• 6、前端知识点--关于遍历汇总


    1、for 

      最简单的一种遍历方法,也是使用频率最高的一种方法,可优化。

    1 var arr = [1, 2, 3, 4, 5, 6]
    2 for(var i = 0; i < arr.length; i++) {
    3     console.log(arr[i])
    4 }
    5 
    6 // 1 2 3 4 5 6

      优化:使用临时变量,将长度存起来,避免重复获取数组长度,当数组交大时,优化效果才比较明显

    1 var arr = [1, 2, 3, 4, 5, 6]
    2 var len = arr.length
    3 for(var i = 0; i < len; i++) {
    4     console.log(arr[i])
    5 }
    6 
    7 // 1 2 3 4 5 6

    2、for ... in...

      这个循环用的人很多,但是效率最低

    var arr = [1,2,3,4,5,6]
    for(var key in arr) {
        console.log(arr[key])
    }
    
    // 1 2 3 4 5 6
    

    3、for ... of ...【ES6】

      虽然性能要好于for ... in ... ,但仍比不上最普通的for(不能循环对象)

    1 var arr = [1, 2, 3, 4, 5, 6]
    2 for(var key of arr) {
    3     console.log(key)
    4 }
    5 
    6 // 1 2 3 4 5 6

    4、forEach

      数组里面的元素有几个,放方法里的回调就会执行几次

      第一个参数时数组里的元素,第二个参数时数组里元素的索引,第三个参数就是它自己本身,

      数组自带的遍历方法,虽然使用频率较高,但是性能仍然比普通循环略低(只是略低,相对还不错)

    1 var arr = [1, 2, 3, 4, 5, 6]
    2 arr.forEach(function (item, idnex, array) {
    3     console.log(item)     // 1 2 3 4 5 6
    4     console.log(array)    // [1, 2, 3, 4, 5, 6]
    5 })

    5、map

      遍历每一个元素,并返回每一个元素,(可以返回处理后的元素)(map映射一一对应)

      返回的新数组和旧数组长度是一样的。

      使用比较广泛,但性能还不如forEach

    1 var arr = [1, 2, 3, 4, 5, 6]
    2 var newArr = arr.map(function (item, idnex) {
    3     return item * item
    4 })
    5 
    6 console.log(newArr)    // [1, 4, 9, 16, 25, 36]

    6、filter

      遍历数组,过滤出符合条件的元素并返回一个新数组

     1 var arr = [
     2     { id: 1, name: '买笔', done: true },
     3     { id: 2, name: '买笔记本', done: true },
     4     { id: 3, name: '练字', done: false }
     5 ]
     6     
     7 var newArr = arr.filter(function (item, index) {
     8     return item.done
     9 })
    10 
    11 console.log(newArr)
    12 
    13 // [{ id: 1, name: '买笔', done: true },{ id: 2, name: '买笔记本', done: true }]

    7、some

      遍历数组,只要有一个以上的元素符合条件  就返回true,否则返回false

     1 var arr = [
     2     { id: 1, name: '买笔', done: true },
     3     { id: 2, name: '买笔记本', done: true },
     4     { id: 3, name: '练字', done: false }
     5 ]
     6 
     7 var bool = arr.some(function (item, index) {
     8     return item.done
     9 })
    10 
    11 console.log(bool)    // true

    8、every

      遍历数组,每一个元素都满足条件,就返回true,否则返回false

     1 var arr = [
     2     { id: 1, name: '买笔', done: true },
     3     { id: 2, name: '买笔记本', done: true },
     4     { id: 3, name: '练字', done: false }
     5 ]
     6 
     7 var bool = arr.every(function (item, index) {
     8     return item.done
     9 })
    10 
    11 console.log(bool)    // false

    9、find【ES6】

      遍历数组,返回符合条件的第一个元素,如果没有符合条件的元素,则返回undefind

    1 var arr = [1, 1, 2, 2, 3, 3, 4, 5, 6]
    2     
    3 var num = arr.find(function (item, index) {
    4     return item === 3
    5 })
    6 
    7 console.log(num)   //  3

    10、findeIndex【ES6】

      遍历数组,返回符合条件的第一个元素的索引,如果没有符合条件的元素,则返回-1

    1 var arr = [1, 1, 2, 2, 3, 3, 4, 5, 6]
    2     
    3 var num = arr.findIndex(function (item) {
    4     return item === 3
    5 })
    6 
    7 console.log(num)   //  4

    总结:forEach、map、filter、reduce、every、some 都会有 break 和 continue 不生效的问题,因为是在function中,但function解决了闭包陷阱的问题;要使用 break、continue 可以使用 for、for...in、for...of、while。 用于遍历数组元素使用:for(),forEach(),map(),for...of 用于循环对象属性使用:for...in

    心灵寄语:每一次汇总,都是一次升华!

  • 相关阅读:
    inux下tcpdump命令的使用
    git的命令行输出正确地显示中文文件名
    mysql权限修改记录
    Linux日常之以当前时间命名文件
    Linux 设置定时任务crontab命令
    (转)NodeJS
    (转)NodeJS收发GET和POST请求
    nodejs入门最简单例子
    「网易官方」极客战记(codecombat)攻略-游戏开发2-瓶颈-chokepoint
    「网易官方」极客战记(codecombat)攻略-游戏开发2-中心队形-center-formation
  • 原文地址:https://www.cnblogs.com/jianguo221/p/11774109.html
Copyright © 2020-2023  润新知