一個簡單js代碼的出錯過程

論壇裏有同學問了一個比較基礎的js數組處理,就是在一個亂序且有重複值的數組中,找到最大的三個值。在回答這個問題過程中,因爲沒有實際測試,我連續犯了幾個低級錯誤,現在記錄下來,給自己一個警醒.

第一次回答的代碼:

function getMax(list, num){
    var result = [];
    list.sort().reverse().foreach((p)=>{
        if(result.lenth < num){
            if(result.indexOf(p) != -1){
                result.push(p);
            }
        }
    })
    return result;
}

提交後,立馬發現判斷語句寫反了,應該用等號,修改之後再提交,又發現forEach敲錯了,大寫的E敲成了小寫的,並且length少敲了一個g。。。

然後想想,做了一個測試,發現返回結果是空數組,立馬反應過來,forEach裏面封裝的是匿名函數,異步執行導致的,唉。。。。

一個小問題,出了幾個低級錯誤。。。。真丟臉。。。。

後來把forEach遍歷改成for循環遍歷,得到了正確的結果。

不過心裏始終有個疙瘩,現在lambda語法很流行,forEach比for要優雅一些,有沒有辦法用forEach也能得到需要的結果呢?

於是繼續改造,給forEach添加await語法,強制同步。雖然代碼看起來有些奇怪,但也能解決問題,並且可以看做是學習js基礎語法的一個良好例題吧:

function getMax(list, num){
    var result = [];
    list.sort().reverse().forEach(async (p)=>{
        if(result.length < num){
            if(result.indexOf(p) == -1){
                await result.push(p);
            }
        }
    })
    return result;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章