方法1:Math.max/Math.min
- 直接用將array丟到Math.max/Math.min會出錯,原因在於參數格式錯誤,所以會return NaN
- If at least one of the arguments cannot be converted to a number, NaN is returned.
var arr = [1, 2, 3, 4, 5];
var max = Math.max(arr);
- 所以必須使用Spread syntax(Spread operator),也就是展開運算子
var a = [3, 4];
var b = [1, 2, ...a, 5];
- 因此正確的將array丟到Math.max/Math.min的寫法為:
var arr = [1, 2, 3, 4, 5];
var max = Math.max(...arr);
- 在Spread syntax的文件中有提到apply的方法
- It is common to use
Function.prototype.apply
in cases where you want to use the elements of an array as arguments to a function.
- 語法:fun.apply(thisArg, [argsArray])
thisArg:函數運行時的內部 this 指向
[argsArray]:調用函數時傳入的參數
- 如何在array丟到Math.max/Math.min,使用apply:
var arr = [1, 2, 3, 4, 5];
var max = Math.max.apply(null, arr);
方法2:Array.sort
- 想法:先將數字排序後,再取第一個值,與最後一個值
- sort的方式:
- arr.sort():根據Unicode字串碼位來排序
- arr.sort(function(a, b){return a-b}):數字由小到大排列
- arr.sort(function(a, b){return b-a}):數字由大到小排列
var arr = [4, 1, 3, 5, 2];
arr.sort(function(a, b){return a-b});
var max = arr[arr.length - 1];
var min = arr[0];
- 缺點:程式執行效率會比方法1差
Reference 參考資料
- Math.max():
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max
- Spread syntax:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator
- Function.prototype.apply():
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
- Array sort():https://www.w3schools.com/jsref/jsref_sort.asp
沒有留言:
張貼留言