文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-01 14:01

关注

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

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查询中的汇总函数相同的聚合物。

来源:web前端开发内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯