欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js的math中缺少的數(shù)學(xué)方法小結(jié)

 更新時(shí)間:2023年08月15日 11:16:22   作者:dralexsanderl  
JavaScript?Math對(duì)象包含一些真正有用且強(qiáng)大的數(shù)學(xué)運(yùn)算,但它缺乏大多數(shù)其他語(yǔ)言提供的許多重要運(yùn)算,例如求和,乘積,奇數(shù)和偶數(shù)等等,本文就來(lái)介紹一下

JavaScript Math 對(duì)象包含一些真正有用且強(qiáng)大的數(shù)學(xué)運(yùn)算,可用于 Web 開(kāi)發(fā),但它缺乏大多數(shù)其他語(yǔ)言提供的許多重要運(yùn)算,本文主要補(bǔ)充一些常用的數(shù)學(xué)方法。

sum 求和

sum函數(shù)將涉及對(duì)數(shù)組中的所有值求和。

有兩種編寫(xiě)此函數(shù)的方法:我們可以使用循環(huán)for,或者使用reduce函數(shù)。

使用for循環(huán):

function sum(array){
    let total = 0
    for(let count = 0; count < array.length; count++){
        total = total + array[count]
    }
    return total
}

使用reduce

function sum(array){
    return array.reduce((sum, number) => sum + number, 0)
}

這兩個(gè)函數(shù)的工作方式完全相同(reduce函數(shù)只是一個(gè)內(nèi)置for循環(huán)),并且將返回相同的數(shù)字(給定相同的數(shù)組)。但reduce功能要簡(jiǎn)潔得多。

能夠?qū)?shù)字列表求和可能是 JavaScript 的Math對(duì)象中最有用和最需要的但是缺失的數(shù)學(xué)操作。sum函數(shù)是一個(gè)很好的檢查工具。例如,在數(shù)獨(dú)中,我們可以通過(guò)檢查列/行之和是否為來(lái)檢查用戶(hù)在該列或行中是否沒(méi)有重復(fù)。如果我們想計(jì)算出總賬單,那么該函數(shù)在在線(xiàn)購(gòu)物應(yīng)用程序中也能很好地工作——假設(shè)所有價(jià)格都存儲(chǔ)在一個(gè)數(shù)組中。

按照購(gòu)物應(yīng)用程序示例,下面是示例:

const prices = [2.80, 6.10, 1.50, 1.00, 8.99, 2.99]
function totalCost(prices){
    return prices.reduce((sum, item) => sum + item, 0)
}

product 乘積

product函數(shù)將以與該函數(shù)類(lèi)似的方式工作sum,只不過(guò)我們不是將列表中的所有數(shù)字相加,而是將它們相乘。

同樣我們可以使用與第一個(gè)sum函數(shù)幾乎相同的for循環(huán):

function product(array){
    let total = 1
    for(let count = 0; count < array.length; count++){
        total = total * array[count]
    }
    return total
}

注意,我們用1來(lái)初始化total變量,否則我們總是會(huì)得到.

使用reduce:

function product(array){
    return array.reduce((total, num) => total*num, 1)
}

這個(gè)函數(shù)的用途可能看起來(lái)并不明顯。但它在嘗試在一次計(jì)算中進(jìn)行多次轉(zhuǎn)換時(shí)非常有用。例如,如果我們想查找 10 個(gè)蘋(píng)果的價(jià)格(每個(gè) 1.5 元),滿(mǎn)10個(gè)打9折,與其使用巨大的乘法和,不如將所有值存儲(chǔ)在數(shù)組中并使用我們剛剛編寫(xiě)的product函數(shù)。

const pricePer = 1.50
const number = 10
const discount = 0.9
const conversion = [1.5, 10, 0.9]
const price = product(conversion)

奇數(shù)和偶數(shù)

這個(gè)函數(shù)將接受一個(gè)數(shù)字,并根據(jù)該數(shù)字是奇數(shù)還是偶數(shù)返回true或者false

在 JavaScript 中編寫(xiě)這些函數(shù)的最簡(jiǎn)單方法是使用余數(shù)運(yùn)算符(%)。當(dāng)一個(gè)數(shù)字除以另一個(gè)數(shù)字時(shí),這將返回余數(shù)。例如:

11 % 3 === 2
// 11 - 3 * 3 = 2

判斷是否偶數(shù)

function isEven(number){
    return number % 2 === 0
}

判斷是否是奇數(shù)

function isOdd(number){
    return number % 2 !== 0
}

能夠檢查一個(gè)數(shù)字是奇數(shù)還是偶數(shù)至關(guān)重要,而且非常簡(jiǎn)單。它可能看起來(lái)不那么重要,但可以作為一種很好的輸入驗(yàn)證技術(shù) - 例如,使用數(shù)組長(zhǎng)度來(lái)做判斷,簡(jiǎn)單地通過(guò)檢查兩人游戲的獲勝者。可以跟蹤已經(jīng)玩了多少輪。假設(shè)第一輪計(jì)為 1,如果數(shù)字為奇數(shù),則玩家 1 獲勝,如果數(shù)字為偶數(shù),則玩家 2 獲勝

function checkWinner(gamesPlayed){
    let winner
    if(isOdd(gamesPlayed)){
        winner = "player1"
    }
    else{
        winner = "player2"
    }
    return winner
}

這些函數(shù)是可以互換的,我們很可能只需要使用其中一個(gè)。

factorial 階乘

自然數(shù)(任何嚴(yán)格大于 0 的整數(shù))的階乘是所有小于或等于該數(shù)的數(shù)的乘積。例如: 3 階乘(用 表示3!)是3 x 2 x 1 = 6。

有兩種創(chuàng)建factorial函數(shù)的方法:使用for循環(huán)和使用遞歸。遞歸算法,它們本質(zhì)上是重復(fù)調(diào)用自身直到達(dá)到“基本情況”的函數(shù)。

使用for循環(huán):

function factorial(number){
  let total = 1
  for (let i = 1; i < number+1; i++){
    total = total * i
  }
  return total
}

這種方式循環(huán)遍歷從 1 到 number 的所有數(shù)字(每次傳遞遞增),并將總數(shù)乘以每個(gè)數(shù)字,然后返回最終總數(shù)(數(shù)字階乘)。

使用遞歸:

function factorial(number){
  if (number <= 0){
    return 1
  }
  else{
    return number * factorial(number - 1)
  }
}

在這個(gè)函數(shù)中,我們的基本情況為零,因?yàn)?code>0!的值為 1。這意味著,當(dāng)數(shù)字通過(guò)函數(shù)時(shí),只要它不為零,它就會(huì)將自身乘以factorial(number - 1)

factors 因子

因子成對(duì)出現(xiàn),每對(duì)因子相乘形成原始數(shù)字。例如:

  • 10的因數(shù)是:1和10;2和5。
  • 18的因數(shù)是:1和18;2和9;3和6。

factors函數(shù)接受一個(gè)數(shù)字,并返回一個(gè)包含其所有因子的數(shù)組。編寫(xiě)此函數(shù)的方法有很多種,但最簡(jiǎn)單的方法是使用命令式方法:

function factors(number){
    let factorsList = []
    for(let count = 1; count < number+1; count++){
        if(number % count === 0){
            factorsList.push(count)
        }
    }
    return factorsList
}

首先,我們創(chuàng)建一個(gè)空數(shù)組。然后,我們使用for循環(huán)遍歷從 1 到數(shù)字本身的每個(gè)整數(shù),并在每次傳遞時(shí)檢查該數(shù)字是否可被該整數(shù)整除

查找數(shù)字的因子非常有用,特別是當(dāng)我們需要組建組時(shí) - 例如在在線(xiàn)游戲中,當(dāng)需要每個(gè)團(tuán)隊(duì)中有相同數(shù)量的用戶(hù)時(shí)。例如,如果我們有 20 個(gè)用戶(hù),每個(gè)團(tuán)隊(duì)需要 10 名玩家,您可以使用一個(gè)factors函數(shù)將這 10 名用戶(hù)分成兩個(gè)團(tuán)隊(duì)進(jìn)行匹配。同樣,如果每支球隊(duì)需要四名球員,可以使用該factors函數(shù)將四支球隊(duì)匹配為五支球隊(duì)。

function createTeams(numberOfPlayers, numberOfTeams){
    let playersInEachTeam
    if(factors(numberOfPlayers).includes(numberOfTeams)){
        playersInEachTeam = numberOfPlayers / numberOfTeams
    }
    else{
        playersInEachTeam = "wait for more players"
    }
    return playersInEachTeam
}

isPrime 質(zhì)數(shù)

質(zhì)數(shù):一個(gè)大于1的自然數(shù),除了1和它本身外,不能被其他自然數(shù)整除

我們可以結(jié)合上一個(gè)factors方法來(lái)實(shí)現(xiàn)。

function isPrime(number){
    return factors(number).length === 2
}

gcd 最大公約數(shù)

最大公約數(shù)運(yùn)算有時(shí)被稱(chēng)為“最大公因數(shù)”,它可以找到兩個(gè)數(shù)字共有的最大因數(shù)。

例如:

  • 12和15的GCD是3。
  • 8 和 4 的 GCD 是 4。

解決這個(gè)問(wèn)題的一個(gè)簡(jiǎn)單方法是列出每個(gè)數(shù)字的所有因數(shù)(使用我們上面提到的factors``)并比較這些列表。然而,比較列表是一個(gè)效率低下的數(shù)組操作。

function gcd(number1, number2){
    let inCommon = []
    for(let i of factors(number1)){
        if(factors(number2).includes(i)){
            inCommon.push(i)
        }
    }
    return inCommon.sort((a,b)=> b - a)[0]
}

還有一種更簡(jiǎn)潔的方法是使用遞歸。這是一個(gè)非常著名的算法,稱(chēng)為歐幾里得算法:

function gcd(number1, number2){
    if(number2 === 0){
        return number1
    }
    else{
        return gcd(number2, number1%number2)
    }
}

lcm 最小公倍數(shù)

最小公倍數(shù)與最大公約數(shù)的類(lèi)似,但是是找到的是兩個(gè)數(shù)字都是其因子的最小整數(shù)。

例如:

  • 2和6的最小公倍數(shù)是6。
  • 4和15的最小公倍數(shù)是60。

對(duì)于這個(gè)函數(shù),我們不能只創(chuàng)建一個(gè)包含每個(gè)數(shù)字的所有倍數(shù)的數(shù)組,因?yàn)檫@將是一個(gè)無(wú)限列表。

可以使用一個(gè)非常有用的公式來(lái)計(jì)算最小公倍數(shù):

(number1 x number2) / 最大公約數(shù)

比如:

(2 x 6) / gcd(2,6) = 12/2 = 6

實(shí)現(xiàn):

function lcm(number1, number2){
    return (number1*number2)/gcd(number1, number2)
}

這個(gè)函數(shù)可能沒(méi)有任何明顯的用途,但它非常適合兩個(gè)事件以不同時(shí)間間隔發(fā)生的情況,這意味著我們可以使用 lcm 來(lái)找出兩個(gè)事件何時(shí)同時(shí)發(fā)生。

例如,如果圖像被編程為每六秒出現(xiàn)一次,一段文本被編程為每八秒出現(xiàn)一次,則圖像和段落將在第 24 秒第一次一起出現(xiàn)。

到此這篇關(guān)于js的math中缺少的數(shù)學(xué)方法小結(jié)的文章就介紹到這了,更多相關(guān)js math缺少數(shù)學(xué)方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論