摘要:如何使用,在一個類型的數(shù)組里,查找最大或最小數(shù)呢以下介紹五個方法。利用代碼如下解釋方法就是通過一個函數(shù),針對一個累加器和數(shù)組中的每一個元素,將一個數(shù)組最終減少到一個值。如果求最小值,將改成。
如何使用JS,在一個Number類型的數(shù)組里,查找最大(或最?。?shù)呢?
以下介紹五個方法。(如果有新方法,后續(xù)會更新,也歡迎各位留言提供新方法)
1. 不使用任何庫函數(shù)代碼如下:
function findMax1 (arr) { let result = 0; if (Array.isArray(arr) && arr.length > 0) { for (let i = 0; i < arr.length; i++) { result = arr[i] > result ? arr[i] : result; } return result; } else { throw new ReferenceError("The parameter arr is invalid"); } }
解釋:
利用一個變量result來存儲最大值。遍歷待查找的數(shù)組,如果當(dāng)前遍歷的元素大于result,就把這個元素賦值給result。
如果求最小值,將arr[i] > result ? arr[i] : result;改成arr[i] < result ? arr[i] : result;。
2. 利用Array.reduce()代碼如下:
function findMax2 (arr) { let result = 0; if (Array.isArray(arr) && arr.length > 0) { result = arr.reduce((a, b) => { return a > b ? a : b; }, 0); return result; } else { throw new ReferenceError("The parameter arr is invalid"); } }
解釋:
reduce方法就是通過一個函數(shù),針對一個累加器(accumulator)和數(shù)組中的每一個元素,將一個數(shù)組最終減少到一個值。
reduce接受兩個參數(shù):
第一個是callback,就是那個前面提到的那個函數(shù)。它有四個參數(shù):
accumulator:累加器,它是上次運行callback的結(jié)果。如果提供了initialValue,那么第一次就是initialValue;
currentValue:當(dāng)前遍歷的數(shù)組的元素;
currentIndex:當(dāng)前遍歷的數(shù)組的元素的index,從0開始。如果提供了initialValue,那就從1開始;
array:當(dāng)前應(yīng)用reduce的數(shù)組。
第二個是initialValue,是一個初值,作為第一次運行callback函數(shù)的第一個實參。這個是可選的。這里要注意一下,如果這個參數(shù)不提供,并且應(yīng)用在一個空數(shù)組上,是會報錯的。
那么上面代碼的意思就是,每次遍歷數(shù)組進行比較,大的就留下來,即accumulator,并將其用作下一次和數(shù)組元素的比較。最后只留下這一個值,即最大值。
如果求最小值,將a > b ? a : b; 改成 a < b ? a : b;。
3. 利用Apply和Math.max()代碼如下:
function findMax3 (arr) { let result = 0; if (Array.isArray(arr) && arr.length > 0) { result = Math.max.apply(null, arr); return result; } else { throw new ReferenceError("The parameter arr is invalid"); } }
解釋:
apply解釋稍顯復(fù)雜,不作進一步的解釋。
它接受兩個參數(shù),第一個是thisArg,第二個是argsArray。兩個都是可選的。此處簡單來說,就是使用一個函數(shù)時,參數(shù)以數(shù)組的方式傳遞進去。
如果是求最小數(shù),將Math.max()改成Math.min()。
4. 只用Math.max()代碼如下:
function findMax4 (arr) { let result = 0; if (Array.isArray(arr) && arr.length > 0) { result = Math.max(...arr); return result; } else { throw new ReferenceError("The parameter arr is invalid"); } }
解釋:
基于上一個解法的思路,在ES6中,有一個擴展運算符(...),可以將一個數(shù)組中的元素拆出來,組成一個用逗號分隔的序列。剛好滿足Math.max()函數(shù)的需求。
如上一種算法,如果是求最小數(shù),將Math.max()改成Math.min()。
利用Array.sort()排序function findMax5 (arr) { let result = 0; if (Array.isArray(arr) && arr.length > 0) { arr.sort((x, y) => y - x); result = arr[0]; return result; } else { throw new ReferenceError("The parameter arr is invalid"); } }
解釋:
通過Array.sort()方法將數(shù)組排序, 如果是求最大,就降序排列;如果是最小數(shù),就升序排列。然后取第一個元素。
這里需要注意的是,Array.sort()如果不傳任何參數(shù),對整數(shù)的排序是有問題的,它只排第一位,也就是高位的順序,而不是整個整數(shù)的大小順序。比如[1, 34, 21, 4], 排序以后是[1, 21, 34, 4]。所以需要自己寫個比較算法。上面的例子是降序排列的例子。如果是升序,將(x, y) => y - x改成(x, y) => x - y即可。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/94027.html
摘要:月下半旬攻略道題,目前已攻略題。目前簡單難度攻略已經(jīng)到題,所以后面會調(diào)整自己,在刷算法與數(shù)據(jù)結(jié)構(gòu)的同時,攻略中等難度的題目。 Create by jsliang on 2019-07-30 16:15:37 Recently revised in 2019-07-30 17:04:20 7 月下半旬攻略 45 道題,目前已攻略 100 題。 一 目錄 不折騰的前端,和咸魚有什么區(qū)別...
摘要:微信公眾號記錄截圖記錄截圖目前關(guān)于這塊算法與數(shù)據(jù)結(jié)構(gòu)的安排前。已攻略返回目錄目前已攻略篇文章。會根據(jù)題解以及留言內(nèi)容,進行補充,并添加上提供題解的小伙伴的昵稱和地址。本許可協(xié)議授權(quán)之外的使用權(quán)限可以從處獲得。 Create by jsliang on 2019-07-15 11:54:45 Recently revised in 2019-07-15 15:25:25 一 目錄 不...
摘要:必選規(guī)定被搜索的數(shù)組可選如果設(shè)置為,則在數(shù)組中檢查給定值的類型,默認(rèn)是搜索數(shù)組中是否存在指定的值?;卣{(diào)函數(shù)接受的參數(shù)數(shù)目應(yīng)該和傳遞給函數(shù)的數(shù)組數(shù)目一致。 開發(fā)過程中經(jīng)常會使用到數(shù)組函數(shù),故特地總結(jié)出來,自己熟悉,同時供大家參考!(實例部分會抽空盡快完成) 一、目錄 array_merge(); 合并數(shù)組 array_keys(); array_filter(); in_array()...
摘要:前端知識點總結(jié)高級持續(xù)更新中字符串什么是連續(xù)存儲多個字符的字符數(shù)組相同下標(biāo)遍歷選取不同類型不同不通用所有字符串都無權(quán)修改原字符串,總是返回新字符串大小寫轉(zhuǎn)換統(tǒng)一轉(zhuǎn)大寫統(tǒng)一轉(zhuǎn)小寫何時不區(qū)分大小寫時,都需要先轉(zhuǎn)為一致的大小寫,再比較。 前端知識點總結(jié)——JS高級(持續(xù)更新中) 1.字符串 什么是: 連續(xù)存儲多個字符的字符數(shù)組 相同: 1. 下標(biāo) 2. .length 3. 遍歷 4....
閱讀 3470·2021-10-11 11:06
閱讀 2258·2019-08-29 11:10
閱讀 2005·2019-08-26 18:18
閱讀 3311·2019-08-26 13:34
閱讀 1615·2019-08-23 16:45
閱讀 1100·2019-08-23 16:29
閱讀 2859·2019-08-23 13:11
閱讀 3313·2019-08-23 12:58