服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服务器之家 - 编程语言 - JavaScript - js教程 - 如何在 JavaScript 中使用数组归约器实现 SQL 聚合函数

如何在 JavaScript 中使用数组归约器实现 SQL 聚合函数

2022-10-13 17:38web前端开发 js教程

SQL查询中的聚合函数对一个或多个值执行计算,并返回单个值。本文为大家介绍下如何在 JavaScript 中使用数组归约器实现 SQL 聚合函数

SQL查询中的聚合函数对一个或多个值执行计算,并返回单个值。

  • Count计算行数。
  • Sum从给定的列中添加所有值。
  • Min和Max返回指定列的最低和最高值。
  • AVG计算给定列中所有值的平均值。

如何在 JavaScript 中使用数组归约器实现 SQL 聚合函数

在所有示例中,我们将使用下表。

Articles Title | Views 3 Ways of Invoking a Method | 123 3 Iterables Converted Into Arrays | 88 How to Find Elements in Array | 402 How to Position a Div | 103

以下是文章对象的相应数组。

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方法使用还原函数将所有值从数组汇总为单个值,它在数组的每个元素上执行给定的还原函数。

我们可以编写不同的还原函数,并计算与SQL查询中的聚合函数相同的聚合物。

Count

下一个SQL查询计算文章表中的行数。

SELECT COUNT(*) FROM Articles

为了在数组中获取对象的数量,我们可以简单地访问长度属性。

articles.length

尽管如此,我们可以编写一个不计算数组中未定义值的还原器。如果当前元素不是无效的,则计算值在每个步骤中会增加。

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

总聚合值用0初始化。请注意,第二个参数传递给了Reduce方法。

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

Sum

下一个SQL查询从表中的所有文章中检索了视图总数。

SELECT SUM(Views) FROM Articles

我们可以使用以下还原函数从一系列对象计算总视图。它采用到目前为止计算的观点总数和当前文章,它从文章中提取视图数量,并将其广告为总数。

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

进行此计算时,我们从0开始作为视图总数。

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

先前的解决方案很好,它可以执行所需的计算,但太具体了。让我们尝试编写一个更通用的功能,该功能以用于计算总和的属性名称。

function sum(propName){}

事实是,Reduce方法使用两个参数调用还原函数。第一个是到目前为止计算的汇总值,第二个参数是当前元素。Reduce方法不会发送我们要接受的属性名称。

解决方案是使Sum函数获取所需的属性名称,然后,返回Reduce方法所需的还原功能。

这是一个例子。

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

请注意,我们如何使用破坏分配语法将对象从对象中动态提取为称为值的新变量。

const {[propName]: value} = obj;

在下面的总和函数下方创建了Reduce方法使用的还原函数。

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

将另一个函数作为输入或返回函数的功能是高阶函数,Sum是一个高阶函数。

Min

下一个SQL查询使用最小聚合函数来显示文章中的最小视图数量。

SELECT MIN(Views) FROM Articles //88

使用还原器可以实现相同的结果,该还原器迄今为止计算出的最小视图数量和当前文章对象。当当前文章的视图少于到目前为止计算的当前最小值时,当前的视图数将成为新的最小值。

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

我们需要回答另一个问题,计算总和0是初始值。计算最小值时的初始值是多少?

一个不错的选择是将第一篇文章中的视图数量用作最初的最小值。

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

Max

下面的SQL查询应用最大聚合函数以找到最大视图数。

SELECT MAX(Views) FROM Articles

最大函数以属性名称检查并返回还原功能,还原器到目前为止获得了计算的最大值和当前对象。当当前对象的视图大于迄今为止计算的值大的视图时,当前视图数量变为新的最大值。否则,返回已经计算的最大值。

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

调用减少方法时,我们可以从0开始作为初始视图数量。

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

Avg

下面的查询使用AVG函数计算所有文章的平均视图数量。

SELECT AVG(Views) FROM Articles

平均值基本上是通过数字或文章潜入所有视图总和的结果,我们可以使用先前的Sum 还原器来计算视图总数,然后通过数组中的元素数进行潜水。

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

写在最后

SQL查询中的聚合函数允许将几行的值汇总到计算值中。

Reduce数组方法允许将数组中的所有元素汇总到单个值中。

我们可以实现 reducer 函数,并计算与SQL查询中的汇总函数相同的聚合物。

原文地址:https://mp.weixin.qq.com/s?__biz=MjM5MDA2MTI1MA==&mid=2649132955&idx=1&sn=a52f5db289614ca9651ec546a33af082&chksm=be58a836892f2120bd39cf85c4b3b38dd10c88ec937ec58a2c5f975cf587ada192640a8ab4e5

延伸 · 阅读

精彩推荐
  • js教程mapboxgl实现带箭头轨迹线的代码

    mapboxgl实现带箭头轨迹线的代码

    这篇文章主要介绍了mapboxgl实现带箭头轨迹线的代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    GIS兵器库9482021-12-27
  • js教程JavaScript使用setTimeout实现倒计时效果

    JavaScript使用setTimeout实现倒计时效果

    这篇文章主要为大家详细介绍了JavaScript使用setTimeout实现倒计时效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一...

    清水拌墨茶5132022-01-21
  • js教程如何在CocosCreator中使用JSZip压缩

    如何在CocosCreator中使用JSZip压缩

    这篇文章主要介绍了在CocosCreator中使用JSZip压缩,对JSZip感兴趣的同学,不妨看一下,并且亲自试一试...

    gamedaybyday8392022-03-05
  • js教程JS+CSS实现过渡特效

    JS+CSS实现过渡特效

    这篇文章主要为大家详细介绍了JS+CSS实现过渡特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Dr_空山3712021-12-23
  • js教程微信小程序使用Echarts和分包的完整步骤

    微信小程序使用Echarts和分包的完整步骤

    这篇文章主要给大家介绍了关于微信小程序使用Echarts和分包的完整步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价...

    little_little8422022-02-15
  • js教程js+Html实现表格可编辑操作

    js+Html实现表格可编辑操作

    这篇文章主要为大家详细介绍了js+Html实现表格可编辑操作,能动态添加删除行,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可...

    qqliang131411742022-03-08
  • js教程Javascript生成器(Generator)的介绍与使用

    Javascript生成器(Generator)的介绍与使用

    这篇文章主要给大家介绍了关于Javascript生成器(Generator)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值...

    疯狂的技术宅3522022-01-12
  • js教程javascript模拟实现计算器

    javascript模拟实现计算器

    这篇文章主要为大家详细介绍了javascript模拟实现计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    HelloWorld11712022-02-23