美文网首页
尽量取消for循环

尽量取消for循环

作者: Alander | 来源:发表于2018-07-30 19:16 被阅读0次

    前言

    在阅读代码和构建代码过程中(均指JS代码),我得出一个结论:我们应该尽量不使用for循环。理由如下:

    1. for循环语义化太差,不易理解
    2. 使用for循环大多数原因是因为我们自己需要对数组或者对象进行操作,而这些操作远不如JS自带的方法来得高效
    3. 数组的for循环基本都可以被 map();reduce();forEach()等等代替

    正文

    自己也是在摸索的途中。
    今天遇见的第一个问题需求:
    1. 将数组中的所有数组进行排序返回一个数组
    Input:[[1,4,5],[1,3,4],[2,6]]
    Output: [1,1,2,3,4,4,5,6]
    暴力的解法很简单,一层一层for循环嵌套遍历即可。
    但我们可以选择更简单的、更值观的方法:

    let ts = [[1,4,5],[1,3,4],[2,6]]
    let res = ts.reduce(
    (nows, array) => nows.concat(array).sort((a, b) => a - b),
    [])
    

    展示出来的代码其实就一两行,且由于方法名称的语义化,我们清晰地知道每一步在干什么。
    除了以上还遇到个需求:
    一个输入框只能输入四个数字怎么办
    vue双向绑定然后每次值变化的时候操作值呗。
    Input:123asdf&.123
    Output:1231
    看起来挺头大的,我们需要把input遍历每个字符然后判断字符是否符合要求,如果不符合还要去除掉。
    但是,JS天生就有一些方法帮助我们来完成这个操作:

    this.pwd = this.pwd.split('')
                       .filter(v => /[0-9]/.test(v))
                       .join('')
                       .slice(0, 4)
    

    也是一行,且完全具有语义化,在我自己看来这样写代码比写一堆for循环来的高效得多,我们只需要把解题得思路转化为语言,问题就解决了。

    结尾

    我相信在日常得开发过程中,我们会不停地遇到for循环,且很有可能变态地嵌套循环。我认为至少在我地编码过程中我都应该尽量避免使用for循环。
    希望给自己和大家带来点提醒和另一种思路吧。

    相关文章

      网友评论

          本文标题:尽量取消for循环

          本文链接:https://www.haomeiwen.com/subject/weqqvftx.html