<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何在 JavaScript 中使用數(shù)組歸約器實現(xiàn) SQL 聚合函數(shù)

          共 3094字,需瀏覽 7分鐘

           ·

          2022-10-15 00:57

          英文 | https://medium.com/dailyjs/how-to-implement-the-sql-aggregate-functions-with-the-array-reducers-in-javascript-9ef02d551ddc

          SQL查詢中的聚合函數(shù)對一個或多個值執(zhí)行計算,并返回單個值。

          • Count計算行數(shù)。

          • Sum從給定的列中添加所有值。

          • Min和Max返回指定列的最低和最高值。

          • AVG計算給定列中所有值的平均值。

          在所有示例中,我們將使用下表。

          ArticlesTitle                              | Views3 Ways of Invoking a Method        | 1233 Iterables Converted Into Arrays  | 88How to Find Elements in Array      | 402How to Position a Div              | 103

          以下是文章對象的相應(yīng)數(shù)組。

          const articles = [  {title: '3 Ways of Invoking a Method', views: 123},  {title: '3 Iterables Converted Into Arrays', views: 88},  {title: 'How to Find Elements in Large Arrays', views: 402},  {title: 'How to Position a Div Element', views: 103} ]

          RELAD方法使用還原函數(shù)將所有值從數(shù)組匯總為單個值,它在數(shù)組的每個元素上執(zhí)行給定的還原函數(shù)。

          我們可以編寫不同的還原函數(shù),并計算與SQL查詢中的聚合函數(shù)相同的聚合物。

          Count

          下一個SQL查詢計算文章表中的行數(shù)。

          SELECT COUNT(*)FROM Articles--4

          為了在數(shù)組中獲取對象的數(shù)量,我們可以簡單地訪問長度屬性。

          articles.length

          盡管如此,我們可以編寫一個不計算數(shù)組中未定義值的還原器。如果當(dāng)前元素不是無效的,則計算值在每個步驟中會增加。

          function count(total, article){ return (article != null && article !== undefined) ? total + 1 : total;}

          總聚合值用0初始化。請注意,第二個參數(shù)傳遞給了Reduce方法。

          const noOfArticles= articles.reduce(count, 0);//4

          Sum

          下一個SQL查詢從表中的所有文章中檢索了視圖總數(shù)。

          SELECT SUM(Views)FROM Articles--716

          我們可以使用以下還原函數(shù)從一系列對象計算總視圖。它采用到目前為止計算的觀點總數(shù)和當(dāng)前文章,它從文章中提取視圖數(shù)量,并將其廣告為總數(shù)。

          function sum(total, article){  const {views} = article;  return total + views;}

          進行此計算時,我們從0開始作為視圖總數(shù)。

          const total = articles.reduce(sum, 0);//716

          先前的解決方案很好,它可以執(zhí)行所需的計算,但太具體了。讓我們嘗試編寫一個更通用的功能,該功能以用于計算總和的屬性名稱。

          function sum(propName){}

          事實是,Reduce方法使用兩個參數(shù)調(diào)用還原函數(shù)。第一個是到目前為止計算的匯總值,第二個參數(shù)是當(dāng)前元素。Reduce方法不會發(fā)送我們要接受的屬性名稱。

          解決方案是使Sum函數(shù)獲取所需的屬性名稱,然后,返回Reduce方法所需的還原功能。

          這是一個例子。

          function sum(propName){  return function(total, obj){    const {[propName]: value} = obj;    return total + value;  }}

          請注意,我們?nèi)绾问褂闷茐姆峙湔Z法將對象從對象中動態(tài)提取為稱為值的新變量。

          const {[propName]: value} = obj;

          在下面的總和函數(shù)下方創(chuàng)建了Reduce方法使用的還原函數(shù)。

          const total = articles.reduce(sum('views'), 0);//716

          將另一個函數(shù)作為輸入或返回函數(shù)的功能是高階函數(shù),Sum是一個高階函數(shù)。

          Min

          下一個SQL查詢使用最小聚合函數(shù)來顯示文章中的最小視圖數(shù)量。

          SELECT MIN(Views)FROM Articles//88

          使用還原器可以實現(xiàn)相同的結(jié)果,該還原器迄今為止計算出的最小視圖數(shù)量和當(dāng)前文章對象。當(dāng)當(dāng)前文章的視圖少于到目前為止計算的當(dāng)前最小值時,當(dāng)前的視圖數(shù)將成為新的最小值。

          function min(propName){  return function(minimum, obj){    const {[propName]: value} = obj;    return value < minimum ? value : minimum;  }}

          我們需要回答另一個問題,計算總和0是初始值。計算最小值時的初始值是多少?

          一個不錯的選擇是將第一篇文章中的視圖數(shù)量用作最初的最小值。

          const minum = articles.reduce(min('views'), articles[0].views);//88

          Max

          下面的SQL查詢應(yīng)用最大聚合函數(shù)以找到最大視圖數(shù)。

          SELECT MAX(Views)FROM Articles

          最大函數(shù)以屬性名稱檢查并返回還原功能,還原器到目前為止獲得了計算的最大值和當(dāng)前對象。當(dāng)當(dāng)前對象的視圖大于迄今為止計算的值大的視圖時,當(dāng)前視圖數(shù)量變?yōu)樾碌淖畲笾?。否則,返回已經(jīng)計算的最大值。

          function max(propName){  return function(maximum, obj){    const {[propName]: value} = obj;    return value > maximum ? value : maximum;  }}

          調(diào)用減少方法時,我們可以從0開始作為初始視圖數(shù)量。

          const total = articles.reduce(max('views'), 0);console.log(total);//402

          Avg

          下面的查詢使用AVG函數(shù)計算所有文章的平均視圖數(shù)量。

          SELECT AVG(Views)FROM Articles--179

          平均值基本上是通過數(shù)字或文章潛入所有視圖總和的結(jié)果,我們可以使用先前的Sum 還原器來計算視圖總數(shù),然后通過數(shù)組中的元素數(shù)進行潛水。

          const total= articles.reduce(sum('views'), 0);const averageViews =  total / articles.length;//179
          寫在最后
          SQL查詢中的聚合函數(shù)允許將幾行的值匯總到計算值中。
          Reduce數(shù)組方法允許將數(shù)組中的所有元素匯總到單個值中。
          我們可以實現(xiàn) reducer 函數(shù),并計算與SQL查詢中的匯總函數(shù)相同的聚合物。
          如果你覺得有用的話,請點贊我,關(guān)注我,感謝你的閱讀,編程愉快!


          學(xué)習(xí)更多技能

          請點擊下方公眾號

          瀏覽 18
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  微信群僵尸粉 | 尻屄视频在线 | av四虎| 狂操日穴欧美大逼 | 91人妻人人澡人人爽人人 |