JS中取二維數(shù)組中最大值的方法匯總__第1頁
JS中取二維數(shù)組中最大值的方法匯總__第2頁
JS中取二維數(shù)組中最大值的方法匯總__第3頁
JS中取二維數(shù)組中最大值的方法匯總__第4頁
JS中取二維數(shù)組中最大值的方法匯總__第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、JS中取二維數(shù)組中最大值的方法匯總_ 本文通過三種解決方案給大家介紹js中取二維數(shù)組中最大值的方法。介紹的特別具體,具有參考價(jià)值 在JavaScript中可以通過內(nèi)置的 Math.max() 的最大值,但是要從多重?cái)?shù)組中取出最大值,還是有肯定的難度。 問題描述 假設(shè)你有一個(gè)數(shù)組,而且這個(gè)數(shù)組中包含了數(shù)字的子數(shù)組,而我們要做的是從數(shù)組中的每個(gè)子數(shù)組中返回其最大的那個(gè)最大數(shù)。 基本解決方案 function largestOfFour(arr) var results = ; / 創(chuàng)建一個(gè)results變量來存儲 / 創(chuàng)建一個(gè)外層循環(huán),遍歷外層數(shù)組 for (var n = 0; n arr.le

2、ngth; n+) var largestNumber = 0; / 創(chuàng)建其次個(gè)變量,存儲最大的數(shù) / 創(chuàng)建另一個(gè)循環(huán),遍歷子數(shù)組 for (var sb = 0; sb arrn.length; sb+) /檢查子數(shù)組的元素是否大于當(dāng)前存儲的最大值 if (arrnsb largestNumber) / 假如為真,將這個(gè)值給予給變量largestNumber largestNumber = arrnsb; / 內(nèi)部循環(huán)后,將每個(gè)子數(shù)組中的值保存到數(shù)組results中 resultsn = largestNumber; / 返回?cái)?shù)組 return results; largestOfFour(

3、1,34,456,2,3,44,234,4567,1,4,5,6,34,78,23,1); /34, 456, 4567, 78 上面的方法是一個(gè)一般的解決方案,通過兩個(gè) for 循環(huán)對數(shù)組及其子數(shù)組做遍歷: 創(chuàng)建一個(gè) results 變量用來存儲每個(gè)子數(shù)組中遍歷出來的最大值 創(chuàng)建外循環(huán) for 遍歷外層數(shù)組 創(chuàng)建其次個(gè)變量 largestNumber 用來存放最大值。這個(gè)變量值必需放在內(nèi)部 for 循環(huán)的外面,由于這樣他才不會被重新安排 創(chuàng)建其次個(gè) for 循環(huán),來遍歷子數(shù)組中的每個(gè)元素 通過一個(gè) if 語句來推斷當(dāng)前子數(shù)組的元素是否大于當(dāng)前存儲的最大值 largestNumber 。假如是

4、( true ),將這個(gè)最大值存儲給 largestNumber 。 內(nèi)部循環(huán)結(jié)束后,將每個(gè)子數(shù)組中的最大值存儲到最初聲明的變量 results 中 最終返回 results 數(shù)組 取出全部子數(shù)組中的每個(gè)最大值之后,得到一個(gè)新數(shù)組 results ,這個(gè)時(shí)候只需要通: Atotype.max = function () return Math.max.apply(,this); largestOfFour(arr).max(); 就可以得到其中的最大值。 largestOfFour(1,34,456,2,3,44,234,4567,1,4,5,6,34,78,23,1).max

5、(); / 4567 中級解決方案 function largestOfFour (arr) / 通過map()方法,并通過回調(diào)函數(shù),將子數(shù)組中最大值組合在一起,得到一新數(shù)組 return arr.map(function (group) / 通過reduce方法,把每個(gè)子數(shù)組中最大值返回到group數(shù)組中 return group.reduce(function (prev, current) / 假如current 大于prev,返回current,否則返回prev return (current prev) ? current : prev; ); ); largestOfFour(1,

6、34,456,2,3,44,234,4567,1,4,5,6,34,78,23,1); / 34, 456, 4567, 78 在外層數(shù)組中用法 Atotype.map() 方法遍歷數(shù)組。用法 map() 方法遍歷數(shù)組,會調(diào)用一個(gè)回調(diào)函數(shù),在這個(gè)回調(diào)函數(shù)中,用法 reduce() 方法對每個(gè)子數(shù)組 group 進(jìn)行合并,將值返回到一個(gè)新數(shù)組中。而在用法 reduce() 方法時(shí),同樣會調(diào)用一個(gè)回調(diào)函數(shù),這個(gè)回調(diào)函數(shù)只做了一件事情,就是子數(shù)組中的元素做為比較,假如 current 大于 prev ,將會返回 current ,否則返回 prev ,最終得到每個(gè)子數(shù)組中最大值。 和

7、前面一樣,通過 Math.max.apply() 最終得到最大值。 最佳解決方案 function largestOfFour (arr) return arr.map(Function.apply.bind(Math.max, null); largestOfFour(1,34,456,2,3,44,234,4567,1,4,5,6,34,78,23,1); /34, 456, 4567, 78 這個(gè)方案,用法 Function.bind 方法創(chuàng)建一個(gè)特別的回調(diào)函數(shù),就類似于 Math.max 方法一樣,但其有一個(gè) Ftotype.apply 功能,將數(shù)組作為它的參數(shù)。

8、 先對主數(shù)組中的每個(gè)元素做遍歷,也就是數(shù)組內(nèi)部的每個(gè)子數(shù)組 用法 map() 方法需要一個(gè)回調(diào)函數(shù),用來找出內(nèi)部每個(gè)數(shù)組中的最大值。需要?jiǎng)?chuàng)建一個(gè)函數(shù),讓 Math.max 能接受輸入的數(shù)組工作。換句話說,這是特別簡潔而且這樣工作也特別的好,如 Math.max(9,43,20,6); 將會返回最大值 43 Ftotype.apply 方法工作可以接受數(shù)組做為參數(shù),但函數(shù)通過調(diào)用上下文,這事情就有點(diǎn)簡單。例如 Math.max.apply(null,9,43,20,6) 將調(diào)用一個(gè) Max.max 方法,但這樣的方法找起來不簡單。 這里給 Ftotyp

9、e.apply 方法傳遞了一個(gè) null 參數(shù),告訴 Math.max 不需要任何上下文。 由于 arr.map() 需要一個(gè)回調(diào)函數(shù),而不只是一個(gè)表達(dá)式,我們在 Function.bind 方法中供應(yīng)了一個(gè)函數(shù) 由于 Ftotype.apply 是一個(gè)靜態(tài)方法,類似一個(gè)函數(shù)對象,我們可以稱之為 Ftotype.apply 上綁定了一個(gè) Ftotype.bind 。例如: Function.apply.bind 現(xiàn)在可以通過 Ftotype.apply.bind 回調(diào)函數(shù)指定其上下文,比如在這個(gè)示例中的 M

10、ath.max 方法 由于是嵌入到 Ftotype.apply 方法,需要一個(gè)上下文作為第一個(gè)參數(shù),而且這個(gè)上下文還是一個(gè)虛假的。 所以我們將 null 作為其次個(gè)參數(shù)傳遞給 Ftotype.apply.bind ,并且綁定一個(gè)上下文,這個(gè)上下文就是 Math.max 方法 由于 Math.max 是獨(dú)立于任何上下文的,所以它會忽視 Ftotype.apply 方法調(diào)用的虛假上下文 我們用法 Ftotype.apply.bind(Math.max,null) 讓一個(gè)新函數(shù)接受 arr.map 值,比如數(shù)組中

11、的子數(shù)組 多維數(shù)組中取最大值 上文用法不同的方法實(shí)現(xiàn)了從二維數(shù)組中取出子數(shù)組中最大值,并且將這些最大值重新組成一個(gè)新數(shù)組,假如延長一下,取出里面的最大值時(shí),還需要用法 Atotype.max 函數(shù),函數(shù)中通過 Math.max.apply(,this) 取得最大值。不過假如不是二維數(shù)組,那上述方法將無法取出數(shù)組中最大的值。 而在多維數(shù)組中取最大值,可以通過 join() 和 split() 方法組合在一起: function largestOfFour (arr) var newArray = arr.join(,).split(,); return Math.max.appl

12、y(,newArray); largestOfFour(12,23); / =23 largestOfFour(12,23,1234,324,345,566); / =1234 largestOfFour(12,23,1234,324,23121,90890,345,566,345,78,90); / =90890 largestOfFour(12,23,1234,324,23121,90890,345,566,345,78,90,90909090,988); / =90909090 同樣可以用法類似的方法取出多維數(shù)組中的最小值: function smallerOfFour (arr) var newArray = arr.join(,).split(,); return Math.min.apply(,newArray); smallerOfFour(12,23); / =12 smallerOfFour(112,23,1234,324,345,566); / =23 smallerOfFour(212,123,1234,324,23121,90890,345,566,345,78,90); / =78 smallerOfFour(102,230,1234,324,23121,90890,34

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論