前言
在阅读代码和构建代码过程中(均指JS代码),我得出一个结论:我们应该尽量不使用for循环。理由如下:
- for循环语义化太差,不易理解
- 使用for循环大多数原因是因为我们自己需要对数组或者对象进行操作,而这些操作远不如JS自带的方法来得高效
- 数组的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循环。
希望给自己和大家带来点提醒和另一种思路吧。