如何使用JS,在一個Number類型的數(shù)組里,查找最大(或最小)數(shù)呢?
以下介紹四個方法。
1. 不使用任何庫函數(shù)
代碼如下:
function findMax1 (arr) { let result = 0; if (Array.isArray(arr)) { for (let i = 0; i < arr.length; i++) { result = arr[i] > result ? arr[i] : result; } return result; } else { console.error('The parameter arr is not an array'); return; }}解釋:
利用一個變量result來存儲最大值。遍歷待查找的數(shù)組,如果當(dāng)前遍歷的元素大于result,就把這個元素賦值給result。
2. 利用Array.reduce()
代碼如下:
function findMax2 (arr) { let result = 0; if (Array.isArray(arr)) { result = arr.reduce((a, b) => { return a > b ? a : b; }, 0); return result; } else { console.error('The parameter arr is not an array'); return; }}解釋:
reduce方法就是通過一個函數(shù),針對一個累加器(accumulator)和數(shù)組中的每一個元素,將一個數(shù)組最終減少到一個值。
reduce接受兩個參數(shù):
第一個是callback,就是那個前面提到的那個函數(shù)。它有四個參數(shù):
第二個是initialValue,是一個初值,作為第一次運行callback函數(shù)的第一個實參。這個是可選的。這里要注意一下,如果這個參數(shù)不提供,并且應(yīng)用在一個空數(shù)組上,是會報錯的。
那么上面代碼的意思就是,每次遍歷數(shù)組進行比較,大的就留下來,即accumulator,并將其用作下一次和數(shù)組元素的比較。最后只留下這一個值,即最大值。
3. 利用Apply和Math.max()
代碼如下:
function findMax3 (arr) { let result = 0; if (Array.isArray(arr)) { result = Math.max.apply(null, arr); return result; } else { console.error('The parameter arr is not an array'); return; }}解釋:
apply解釋稍顯復(fù)雜,不作進一步的解釋。
它接受兩個參數(shù),第一個是thisArg,第二個是argsArray。兩個都是可選的。此處簡單來說,就是使用一個函數(shù)時,參數(shù)以數(shù)組的方式傳遞進去。
4. 只用Math.max()
代碼如下:
function findMax4 (arr) { let result = 0; if (Array.isArray(arr)) { result = Math.max(...arr); return result; } else { console.error('The parameter arr is not an array'); return; }}解釋:
基于上一個解法的思路,在ES6中,有一個擴展運算符(...),可以將一個數(shù)組中的元素拆出來,組成一個用逗號分隔的序列。剛好滿足Math.max()函數(shù)的需求。
新聞熱點
疑難解答
圖片精選