国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS中求數(shù)組最大(最?。┲祬R總(持續(xù)更新)

church / 1865人閱讀

摘要:如何使用,在一個(gè)類型的數(shù)組里,查找最大或最小數(shù)呢以下介紹五個(gè)方法。利用代碼如下解釋方法就是通過(guò)一個(gè)函數(shù),針對(duì)一個(gè)累加器和數(shù)組中的每一個(gè)元素,將一個(gè)數(shù)組最終減少到一個(gè)值。如果求最小值,將改成。

如何使用JS,在一個(gè)Number類型的數(shù)組里,查找最大(或最?。?shù)呢?

以下介紹五個(gè)方法。(如果有新方法,后續(xù)會(huì)更新,也歡迎各位留言提供新方法)

1. 不使用任何庫(kù)函數(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");
    }
}

解釋:

利用一個(gè)變量result來(lái)存儲(chǔ)最大值。遍歷待查找的數(shù)組,如果當(dāng)前遍歷的元素大于result,就把這個(gè)元素賦值給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方法就是通過(guò)一個(gè)函數(shù),針對(duì)一個(gè)累加器(accumulator)和數(shù)組中的每一個(gè)元素,將一個(gè)數(shù)組最終減少到一個(gè)值。

reduce接受兩個(gè)參數(shù):

第一個(gè)是callback,就是那個(gè)前面提到的那個(gè)函數(shù)。它有四個(gè)參數(shù):

accumulator:累加器,它是上次運(yùn)行callback的結(jié)果。如果提供了initialValue,那么第一次就是initialValue

currentValue:當(dāng)前遍歷的數(shù)組的元素;

currentIndex:當(dāng)前遍歷的數(shù)組的元素的index,從0開始。如果提供了initialValue,那就從1開始;

array:當(dāng)前應(yīng)用reduce的數(shù)組。

第二個(gè)是initialValue,是一個(gè)初值,作為第一次運(yùn)行callback函數(shù)的第一個(gè)實(shí)參。這個(gè)是可選的。這里要注意一下,如果這個(gè)參數(shù)不提供,并且應(yīng)用在一個(gè)空數(shù)組上,是會(huì)報(bào)錯(cuò)的。

那么上面代碼的意思就是,每次遍歷數(shù)組進(jìn)行比較,大的就留下來(lái),即accumulator,并將其用作下一次和數(shù)組元素的比較。最后只留下這一個(gè)值,即最大值。

如果求最小值,將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ù)雜,不作進(jìn)一步的解釋。

它接受兩個(gè)參數(shù),第一個(gè)是thisArg,第二個(gè)是argsArray。兩個(gè)都是可選的。此處簡(jiǎn)單來(lái)說(shuō),就是使用一個(gè)函數(shù)時(shí),參數(shù)以數(shù)組的方式傳遞進(jìn)去。

如果是求最小數(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");
    }
}

解釋:

基于上一個(gè)解法的思路,在ES6中,有一個(gè)擴(kuò)展運(yùn)算符(...),可以將一個(gè)數(shù)組中的元素拆出來(lái),組成一個(gè)用逗號(hào)分隔的序列。剛好滿足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");
    }
}

解釋:

通過(guò)Array.sort()方法將數(shù)組排序, 如果是求最大,就降序排列;如果是最小數(shù),就升序排列。然后取第一個(gè)元素。

這里需要注意的是,Array.sort()如果不傳任何參數(shù),對(duì)整數(shù)的排序是有問(wèn)題的,它只排第一位,也就是高位的順序,而不是整個(gè)整數(shù)的大小順序。比如[1, 34, 21, 4], 排序以后是[1, 21, 34, 4]。所以需要自己寫個(gè)比較算法。上面的例子是降序排列的例子。如果是升序,將(x, y) => y - x改成(x, y) => x - y即可。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/94027.html

相關(guān)文章

  • LeetCode 攻略 - 2019 年 7 月下半月匯總(100 題攻略)

    摘要:月下半旬攻略道題,目前已攻略題。目前簡(jiǎn)單難度攻略已經(jīng)到題,所以后面會(huì)調(diào)整自己,在刷算法與數(shù)據(jù)結(jié)構(gòu)的同時(shí),攻略中等難度的題目。 Create by jsliang on 2019-07-30 16:15:37 Recently revised in 2019-07-30 17:04:20 7 月下半旬攻略 45 道題,目前已攻略 100 題。 一 目錄 不折騰的前端,和咸魚有什么區(qū)別...

    tain335 評(píng)論0 收藏0
  • LeetCode 攻略 - 2019 年 7 月上半月匯總(55 題攻略)

    摘要:微信公眾號(hào)記錄截圖記錄截圖目前關(guān)于這塊算法與數(shù)據(jù)結(jié)構(gòu)的安排前。已攻略返回目錄目前已攻略篇文章。會(huì)根據(jù)題解以及留言內(nèi)容,進(jìn)行補(bǔ)充,并添加上提供題解的小伙伴的昵稱和地址。本許可協(xié)議授權(quán)之外的使用權(quán)限可以從處獲得。 Create by jsliang on 2019-07-15 11:54:45 Recently revised in 2019-07-15 15:25:25 一 目錄 不...

    warmcheng 評(píng)論0 收藏0
  • PHP開發(fā)過(guò)程中數(shù)組匯總 [ 持續(xù)更新系列 ]

    摘要:必選規(guī)定被搜索的數(shù)組可選如果設(shè)置為,則在數(shù)組中檢查給定值的類型,默認(rèn)是搜索數(shù)組中是否存在指定的值?;卣{(diào)函數(shù)接受的參數(shù)數(shù)目應(yīng)該和傳遞給函數(shù)的數(shù)組數(shù)目一致。 開發(fā)過(guò)程中經(jīng)常會(huì)使用到數(shù)組函數(shù),故特地總結(jié)出來(lái),自己熟悉,同時(shí)供大家參考?。▽?shí)例部分會(huì)抽空盡快完成) 一、目錄 array_merge(); 合并數(shù)組 array_keys(); array_filter(); in_array()...

    twohappy 評(píng)論0 收藏0
  • 前端知識(shí)點(diǎn)總結(jié)——JS高級(jí)(持續(xù)更新中)

    摘要:前端知識(shí)點(diǎn)總結(jié)高級(jí)持續(xù)更新中字符串什么是連續(xù)存儲(chǔ)多個(gè)字符的字符數(shù)組相同下標(biāo)遍歷選取不同類型不同不通用所有字符串都無(wú)權(quán)修改原字符串,總是返回新字符串大小寫轉(zhuǎn)換統(tǒng)一轉(zhuǎn)大寫統(tǒng)一轉(zhuǎn)小寫何時(shí)不區(qū)分大小寫時(shí),都需要先轉(zhuǎn)為一致的大小寫,再比較。 前端知識(shí)點(diǎn)總結(jié)——JS高級(jí)(持續(xù)更新中) 1.字符串 什么是: 連續(xù)存儲(chǔ)多個(gè)字符的字符數(shù)組 相同: 1. 下標(biāo) 2. .length 3. 遍歷 4....

    wangzy2019 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<