


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、JS中取二維數(shù)組中最大值的方法匯總本文通過三種解決方案給大家介紹js中取二維數(shù)組中最大值的方法。介紹的非常詳細(xì),具有參考價值在JavaScript 中可以通過內(nèi)置的 Math.max 的最大 值,但是要從多重數(shù)組中取出最大值,還是有一定的難度。問題描述假設(shè)你有一個數(shù)組,而且這個數(shù)組中包含了數(shù)字的子數(shù) 組,而我們要做的是從數(shù)組中的每個子數(shù)組中返回其最大的 那個最大數(shù)。基本解決方案function largestOfFour(arr) var results = ; /創(chuàng)建一個results 變量來存儲/創(chuàng)建一個外層循環(huán),遍歷外層數(shù)組for (var n = 0; nvar largestNumb
2、er = 0; II 創(chuàng)建第二個變量,存儲最大的數(shù)II創(chuàng)建另一個循環(huán),遍歷子數(shù)組for (var sb = 0; sbII檢查子數(shù)組的元素是否大于當(dāng)前存儲的最大值if (arrnsb > largestNumber) II 如果為真,將這個值賦予給變量largestNumberlargestNumber = arrnsb;/內(nèi)部循環(huán)后,將每個子數(shù)組中的值保存到數(shù)組results 中resultsn = largestNumber;/返回數(shù)組return results;largestOfFour(1,34,456,2,3,44,234,4567,1,4,5, 6,34,78,23,1);
3、 /34, 456, 4567, 78上面的方法是一個普通的解決方案,通過兩個for 循環(huán)對數(shù)組及其子數(shù)組做遍歷:創(chuàng)建一個results變量用來存儲每個子數(shù)組中遍歷出來的最大值創(chuàng)建外循環(huán)for遍歷外層數(shù)組創(chuàng)建第二個變量 largestNumber 用來存放最大值。這 個變量值必須放在內(nèi)部 for 循環(huán)的外面,因為這樣他才不 會被重新分配創(chuàng)建第二個for 循環(huán),來遍歷子數(shù)組中的每個元素通過一個if語句來判斷當(dāng)前子數(shù)組的元素是否大于當(dāng)前存儲的最大值largestNumber。如果是(true ),將這個最大值存儲給largestNumber 。內(nèi)部循環(huán)結(jié)束后,將每個子數(shù)組中的最大值存儲到最初聲明的
4、變量results 中最后返回results 數(shù)組取出所有子數(shù)組中的每個最大值之后,得到一個新數(shù)組results ,這個時候只需要通: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 ; / 4567中級解決方案function largestOfFour (arr) /通過map方法,并通過回調(diào)函數(shù),將子數(shù)組中最大 值組合在一起
5、,得到一新數(shù)組return arr.map(function (group) /通過reduce方法,把每個子數(shù)組中最大值返回到group數(shù)組中return group.reduce(function (prev, current) / 如果 current 大于 prev,返回 current,否則返回prevreturn (current > prev) ? current : prev;););largestOfFour(1,34,456,2,3,44,234,4567,1,4,5, 6,34,78,23,1); / 34, 456, 4567, 78在外層數(shù)組中使用Array.p
6、rototype.map 方法遍歷數(shù)組。使用map方法遍歷數(shù)組,會調(diào)用一個回調(diào)函數(shù),在 這個回調(diào)函數(shù)中,使用reduce方法對每個子數(shù)組group進(jìn)行合并,將值返回到一個新數(shù)組中。而在使用reduce 方法時,同樣會調(diào)用一個回調(diào)函數(shù),這個回調(diào)函數(shù)只做了一件 事情,就是子數(shù)組中的元素做為比較,如果current 大于prev,將會返回current ,否則返回prev ,最終得到每 個子數(shù)組中最大值。和前面一樣,通過 Math.max.apply最終得到最大值。最佳解決方案function largestOfFour (arr) return arr.map(Function.apply.bin
7、d(Math.max,null); largestOfFour(1,34,456,2,3,44,234,4567,1,4,5,6,34,78,23,1); 34, 456, 4567, 78這個方案,使用 Function.bind方法創(chuàng)建一個特殊的回調(diào)函數(shù),就類似于Math.max 方法一樣,但其有一個Ftotype.apply功能,將數(shù)組作為它的參數(shù)。先對主數(shù)組中的每個元素做遍歷,也就是數(shù)組內(nèi)部的每個子數(shù)組使用map方法需要一個回調(diào)函數(shù),用來找出內(nèi)部每個數(shù)組中的最大值。需要創(chuàng)建一個函數(shù),讓Math.max能接受輸入的數(shù)組工作。換句話說,這是非常簡單而且這樣工作也非常的
8、好,如Math.max(9,43,20,6);將會返回最大值43Ftotype.apply方法工作可以接受數(shù)組做為參數(shù),但函數(shù)通過調(diào)用上下文,這事情就有點復(fù)雜。例如 Math.max.apply(null,9,43,20,6)將調(diào)用一個Max.max方法,但這樣的方法找起來不容易。這里給 Ftotype.apply方法傳遞了一個null參數(shù),告訴 Math.max不需要任何上下文。因為arr.map需要一個回調(diào)函數(shù),而不只是一個表達(dá)式,我們在Function.bind方法中提供了一個函數(shù)因為 Ftotype.apply是一個靜態(tài)
9、方法,類似一個函數(shù)對象,我們可以稱之為 Ftotype.apply上 綁 定 了 一 個Ftotype.bind。例女口 : Function.apply.bind現(xiàn)在可以通過 Ftotype.apply.bind回調(diào)函數(shù)指定其上下文,比如在這個示例中的Math.max方法由于是嵌入至U Ftotype.apply 方法,需要 一個上下文作為個參數(shù),而且這個上下文還是一個虛假的。所以我們將 null 作為第二個參數(shù)傳遞給Ftotype.apply.bind,并且綁定一個上下文,這個上下
10、文就是 Math.max 方法由于Math.max是獨立于任何上下文的,所以它會忽略Ftotype.apply方法調(diào)用的虛假上下文我們使用Ftotype.apply.bind(Math.max,null)讓一個新函數(shù)接受arr.map 值,比如數(shù)組中的子數(shù)組多維數(shù)組中取最大值上文使用不同的方法實現(xiàn)了從二維數(shù)組中取出子數(shù)組中最大值,并且將這些最大值重新組成一個新數(shù)組,如果延 伸一下,取出里面的最大值時,還需要使用 Atotype.max函 數(shù), 函 數(shù) 中 通 過Math.max.apply(,this)取得最大值。不過如果不是二維數(shù)組
11、,那上述方法將無法取出數(shù)組中最大的值。而在多維數(shù)組中取最大值,可以通過join方法組合在一起:function largestOfFour (arr) var newArray = arr.join(",").split(",");return Math.max.apply(,newArray);largestOfFour(12,23); / =>23 largestOfFour(12,23,1234,324,345,566);=>1234largestOfFour(12,23,1234,324,23121,90890,345, 566,34
12、5,78,90); / =>90890largestOfFour(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);和 split/smallerOfFour(12,23); / =>12smallerOfFour(112,23,1234,324,345,566); /=>23smallerOfFour(212,123,1234,324,23121,90890,345.566, 345,78,90); / =>78smallerOfFour(102,230,1234,324,23121,90890,345.566,
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 航空航天復(fù)合材料 課件第1章 知識點6 微珠、納米碳管、石墨烯、有機(jī)纖維
- 2025醫(yī)院消防培訓(xùn)
- 護(hù)理查房:下肢骨折透析患者管理
- 長度計量基礎(chǔ)培訓(xùn)
- 創(chuàng)傷處理培訓(xùn)
- 超聲圖解及報告標(biāo)準(zhǔn)化流程
- 地球日環(huán)保教育
- 2025年中國排毒面膜行業(yè)市場全景分析及前景機(jī)遇研判報告
- 急性闌尾炎及術(shù)后護(hù)理常規(guī)
- 2025年中國木工油漆刷行業(yè)市場全景分析及前景機(jī)遇研判報告
- 常州保安證考試題及答案
- 全國中小學(xué)生學(xué)籍信息管理系統(tǒng)用戶操作手冊(學(xué)校級)
- 《合理用藥安全教育》課件
- 稽留流產(chǎn)治療
- NES-3000 ECDIS電子海圖顯示與信息系統(tǒng)操作手冊
- 2025年上半年內(nèi)蒙古包頭市市直事業(yè)單位招考易考易錯模擬試題(共500題)試卷后附參考答案
- 雪亮工程可行性研究報告
- 2025年度人工智能產(chǎn)業(yè)投資基金入股協(xié)議4篇
- 聚脲涂料施工方案
- T-CCIASD 10012-2024 ISO 標(biāo)準(zhǔn)集裝箱用水性涂料
- 激越管理的22項建議(精神科患者激越的評估和管理)
評論
0/150
提交評論