zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    利用GitHub和Hexo打造免费的个人博客 coder
    Android基础——项目的文件结构(二) coder
    25个Android酷炫开源UI框架 coder
    MarkDown使用教程(In Atom) coder
    Android基础——项目的文件结构(一) coder
    25类Android常用开源框架 coder
    Android Activity启动黑/白屏原因与解决方式 coder
    我的window phone 开发第一步
    Entity Framework 4 In Action 读书笔记
    最近在制作一套ASP.NET控件,已初见雏形
  • 原文地址:https://www.cnblogs.com/jianguo221/p/11774109.html
Copyright © 2011-2022 走看看