前言
在閱讀代碼和構建代碼過程中(均指JS代碼)囱稽,我得出一個結論:我們應該盡量不使用for循環(huán)洁墙。理由如下:
- for循環(huán)語義化太差,不易理解
- 使用for循環(huán)大多數原因是因為我們自己需要對數組或者對象進行操作师枣,而這些操作遠不如JS自帶的方法來得高效
- 數組的for循環(huán)基本都可以被 map();reduce();forEach()等等代替
正文
自己也是在摸索的途中血巍。
今天遇見的第一個問題需求:
1. 將數組中的所有數組進行排序返回一個數組
Input:[[1,4,5],[1,3,4],[2,6]]
Output: [1,1,2,3,4,4,5,6]
暴力的解法很簡單,一層一層for循環(huán)嵌套遍歷即可藕施。
但我們可以選擇更簡單的寇损、更值觀的方法:
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循環(huán)來的高效得多着憨,我們只需要把解題得思路轉化為語言墩衙,問題就解決了。
結尾
我相信在日常得開發(fā)過程中甲抖,我們會不停地遇到for循環(huán)漆改,且很有可能變態(tài)地嵌套循環(huán)。我認為至少在我地編碼過程中我都應該盡量避免使用for循環(huán)准谚。
希望給自己和大家?guī)睃c提醒和另一種思路吧挫剑。