站長留言

  • ✅ 本站維護及更新歷史紀錄,詳情請參考公告
  • ✅ 有任何意見、想法,歡迎留言給Spicy知道喔
  • ✅ 固定於每周一至周五更新Blogger文章,周末不定期
程式CodewarsJavaScript

【JavaScript】取出數字陣列中的max, min

tags: Javascript

方法1:Math.max/Math.min

  1. 直接用將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);
//max會變成NaN,而不是5
  1. 所以必須使用Spread syntax(Spread operator),也就是展開運算子
    • 展開運算子:
    var a = [3, 4]; 
    var b = [1, 2, ...a, 5]; 
    //b會變成[1, 2, 3, 4, 5]
    
  2. 因此正確的將array丟到Math.max/Math.min的寫法為:
var arr = [1, 2, 3, 4, 5];
var max = Math.max(...arr);
  1. 在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]:調用函數時傳入的參數
  2. 如何在array丟到Math.max/Math.min,使用apply:
var arr = [1, 2, 3, 4, 5];
var max = Math.max.apply(null, arr); 

方法2:Array.sort

  1. 想法:先將數字排序後,再取第一個值,與最後一個值
  2. 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. 缺點:程式執行效率會比方法1差

Reference 參考資料

  1. Math.max():
    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max
  2. Spread syntax:
    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator
  3. Function.prototype.apply():
    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
  4. Array sort():https://www.w3schools.com/jsref/jsref_sort.asp

沒有留言:

張貼留言

本網站建議使用電腦或平板瀏覽