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會把每次迭代的結果收集到一個陣列中。——譯者注
相關文章
- CoffeeScript攻略4.9:篩選陣列陣列
- CoffeeScript攻略4.8:歸納陣列陣列
- CoffeeScript攻略4.7:對映陣列陣列
- CoffeeScript攻略4.10:反轉陣列陣列
- CoffeeScript攻略4.1:從陣列生成字串陣列字串
- CoffeeScript攻略4.6:打亂陣列元素陣列
- CoffeeScript攻略4.4:使用陣列交換變數陣列變數
- CoffeeScript攻略4.5:定義陣列範圍陣列
- JavaScript 陣列最大值JavaScript陣列
- C 陣列最大值陣列
- 視窗最大值陣列陣列
- CoffeeScript攻略1.1:嵌入JavaScriptJavaScript
- CoffeeScript攻略1.3:for迴圈
- CoffeeScript攻略3.7:拆分字串字串
- CoffeeScript攻略3.9:匹配字串字串
- JavaScript 獲取陣列中最大值JavaScript陣列
- JavaScript 陣列排序 與 求最大值JavaScript陣列排序
- [待]生成視窗最大值陣列陣列
- CoffeeScript攻略3.8:字串插值字串
- CoffeeScript攻略3.1:重複字串字串
- JavaScript 陣列最大值和最小值JavaScript陣列
- JavaScript 陣列 最大值和最小值JavaScript陣列
- 遞迴求解陣列中的最大值遞迴陣列
- JavaScript陣列最大值和最小值JavaScript陣列
- CoffeeScript攻略3.4:查詢子字串字串
- CoffeeScript攻略1.2:比較範圍
- CoffeeScript攻略2.4:建立類變數變數
- CoffeeScript攻略2.5:鏈式呼叫物件物件
- js如何獲取陣列中的最大值JS陣列
- CoffeeScript攻略3.10:生成唯一ID
- CoffeeScript攻略2.1:克隆物件(深複製)物件
- JavaScript獲取陣列最大值和最小值JavaScript陣列
- LeetCode 410——分割陣列的最大值LeetCode陣列
- JavaScript陣列中的最大值和最小值JavaScript陣列
- JavaScript陣列最大值、最小值和平均數JavaScript陣列
- 獲取陣列中子串乘積的最大值陣列
- 第四章:多維陣列和矩陣 ------------- 4.3 基礎題:Z形列印二位陣列陣列矩陣
- CoffeeScript攻略2.3:CoffeeScrip的type函式函式