Javascript面試題-找出數組最大值和最小值的多種方法

編程語言 JavaScript 文章 GitHub coder分享 2017-05-29

前言

最近這一系列的文章都是寫的關於Javascript面試題的,而且很多題目都比較常見,大家可以自己實現一下,相信對大家基礎的提升很有幫助,而且這些題目和結果我都已經開源,感興趣的自取。

Javascript面試題-找出數組最大值和最小值的多種方法

Javascript

題目

今天這篇文章,我們來看看這樣一道題目,利用Javascript編寫一個算法,求出一個數組的最大值和最小值,例如給定一個數組[2,4,10,7,5,8,6],得到結果最大值為10,最小值為2。

以下是github地址,可以直接看源碼。

https://github.com/zhouxiongking/article-pages/blob/master/articles/arrayMinMax/arrayMinMax.js

算法1

算法1的主要思想是通過prototype原型擴展min和max方法。min和max方法中都通過循環,由第一個值依次和後面每個值比較,動態更新最大值和最小值,從而找出結果。

通過上述的算法分析,得出以下算法代碼,同時我們直接給出測試代碼。

Javascript面試題-找出數組最大值和最小值的多種方法

算法1

通過後面的測試結果,得出算法1的正確性。

算法2

算法2的主要思想是藉助Math對象的min和max方法。通過apply方法改變方法的執行體,然後將數組作為參數傳遞給apply方法,這樣數組就可以使用min和max方法,直接取得結果。

通過以上的算法分析,我們得出以下代碼,同時我們直接給出測試代碼。

Javascript面試題-找出數組最大值和最小值的多種方法

算法2

通過最後的輸出結果,我們可以看出算法2的正確性。

算法3

針對上述算法2,我們發現將min方法和max方法作為Array對象的靜態方法,並不支持鏈式調用,我們可以利用對象字面量簡化代碼得到算法3,因此算法3是對算法2的改進。Javascript面試題-找出數組最大值和最小值的多種方法

算法3

上述改進的代碼中apply方法的第一個參數是一個空對象,實際是當前執行環境的全局對象,然後傳入的this,表示的是執行數組。

因為apply方法的特殊性,我們還可以得到算法3的其他幾種實現方式,因為在apply中第一個參數傳入undefined, null, {}會得到相同的效果。

Javascript面試題-找出數組最大值和最小值的多種方法

算法3

算法4

算法4的主要思想是藉助數組Array的reduce方法。數組的reduce方法接收一個函數作為累積器,數組每個元素從左至右依次處理,最終得到最小值或最大值。

通過上述思想,得到以下算法代碼,同時包括測試結果。

Javascript面試題-找出數組最大值和最小值的多種方法

算法4

通過上述測試結果,得知算法4的正確性。

算法5

算法5的主要思想是藉助數組的sort方法。數組原生的sort方法會自動排序,但是在默認情況下是按照字母順序排序,因此我們需要添加一個自定義的排序函數。

通過上述思想,得出以下代碼。

Javascript面試題-找出數組最大值和最小值的多種方法

算法5

通過上述測試結果,得知算法5的正確性。

算法6

算法6的主要思想是藉助ES6新特性的擴展運算符。其算法的代碼特別簡單,如下圖所示。

Javascript面試題-找出數組最大值和最小值的多種方法

算法6

這看起來是最簡單的一種算法,但卻也是不太容易想起來的方法。

總結

今天這篇文章主要講解了在Javascript中找出數組中最大和最小元素的多種方法,大家都掌握了嗎?

相關推薦

推薦中...