CoffeeScript攻略4.3:取得陣列最大值
問題
你需要找出陣列中包含的最大的值。
方案
在ECMAScript 5中,可以使用Array的reduce方法。而在之前版本的JavaScript實現中,要在列表推導基礎上使用Math.max:
# ECMAScript 5
[12,32,11,67,1,3].reduce (a,b) -> Math.max a, b
# => 67
# EC5之前的實現
max = Math.max(max or= num, num) for num in [12,32,11,67,1,3]
# => [ 12, 32, 32, 67, 67, 67 ]
max
# => 67
討論
Math.max在這裡比較兩個數值,返回其中較大的一個;本攻略(兩種方案)的其他程式碼的目的就是遍歷陣列,找出其中最大的值。有意思的是,在用列表推導的結果賦值時,所賦值為上一次比較得到的值,但賦值表示式本身(比如在node.js的CoffeScript直譯器中)在列表推導過程中也會被求值,並生成一個包含每次比較結果的完整對映1。這就意味著在EC5之前的實現中,會產生兩個陣列。
在ECMAScript 4中,對於非常大的陣列,更節省記憶體的方法就是將max初始化為陣列的第一個元素,然後使用普通的for迴圈來遍歷陣列。因為在這本CoffeeScript攻略中不鼓勵大家使用非CoffeeScript技巧,所以讀者可以自己去練習。
1《CoffeeScript語言參考》:在把推導的結果賦值給變數時,CoffeeScript會把每次迭代的結果收集到一個陣列中。——譯者注
相關文章
- JavaScript 獲取陣列中最大值JavaScript陣列
- JavaScript 陣列排序 與 求最大值JavaScript陣列排序
- LeetCode 410——分割陣列的最大值LeetCode陣列
- JavaScript 陣列最大值和最小值JavaScript陣列
- 2439. 最小化陣列中的最大值陣列
- JavaScript獲取陣列最大值和最小值JavaScript陣列
- JavaScript陣列中的最大值和最小值JavaScript陣列
- JavaScript陣列最大值、最小值和平均數JavaScript陣列
- 第四章:多維陣列和矩陣 ------------- 4.3 基礎題:Z形列印二位陣列陣列矩陣
- 【演算法實戰】生成視窗最大值陣列演算法陣列
- 求陣列之和,最小值,最大值,平均值陣列
- 修改陣列【並查集維護集合的最大值、連續數字的最大值】陣列並查集
- js獲取數字陣列最大值的幾種方式JS陣列
- Golang獲取int陣列裡的最大值和下標Golang陣列
- C語言函式題-查詢陣列每行的最大值C語言函式陣列
- 尋找陣列中的最大值和最小值O(1.5*N)陣列
- 給出一個由[-100,100]之間整陣列成的陣列,求其相加和最大的連續子陣列 輸入 一個連續整陣列成的陣列 輸出 子陣列相加的最大值 樣例輸入 -......陣列
- 【VBA】Rangeの行、列、行數、列數を取得
- JavaSE 陣列:一維陣列&二維陣列Java陣列
- leetcode410分割陣列的最大值(二分+貪心,困難)LeetCode陣列
- Java陣列03:陣列使用Java陣列
- 陣列,陣列類,SyStem類陣列
- Python演算法與資料結構–求所有子陣列的和的最大值Python演算法資料結構陣列
- Python演算法與資料結構--求所有子陣列的和的最大值Python演算法資料結構陣列
- 數列區間最大值(ST表)
- 陣列--移除陣列中指定的元素,不改變原陣列和改變原陣列陣列
- 指標陣列和陣列指標與二維陣列指標陣列
- 陣列二:使用陣列可變函式為陣列排序陣列函式排序
- Javascript - 陣列和陣列的方法JavaScript陣列
- 陣列指標,指標陣列陣列指標
- CoffeeScript和Sass提高Web開發效率Web
- 1434: 矩陣的最大值(指標專題)矩陣指標
- [求解]陣列,分成倆個陣列,陣列值之和的相差最小。陣列
- 記一次陣列操作:陣列 A 根據陣列 B 排序陣列排序
- 陣列陣列
- 陣列演算法-差分陣列陣列演算法
- 【陣列】977. 有序陣列的平方陣列
- 指標陣列與陣列指標指標陣列
- 2-7 陣列:動態陣列陣列