js的内建函数reduce

二婷啵      2022-02-14     745

关键词:

reduce函数,是ECMAScript5规范中出现的数组方法。在平时的工作中,相信大家使用的场景并不多,一般而言,可以通过reduce方法实现的逻辑都可以通过forEach方法来变相的实现,虽然不清楚浏览器的js引擎是如何在C++层面实现这两个方法,但是可以肯定的是reduce方法肯定也存在数组的遍历,在具体实现细节上是否针对数组项的操作和存储做了什么优化,则不得而知。


 

数组的reduce方法的应用

reduce方法有两个参数,第一个参数是一个callback,用于针对数组项的操作;第二个参数则是传入的初始值,这个初始值用于单个数组项的操作。需要注意的是,reduce方法返回值并不是数组,而是形如初始值的经过叠加处理后的操作。

reduce方法最常见的场景就是叠加。

var items = [10, 120, 1000];

// our reducer function
var reducer = function add(sumSoFar, item) { return sumSoFar + item; };

// do the job
var total = items.reduce(reducer, 0);

console.log(total); // 1130

可以看出,reduce函数根据初始值0,不断的进行叠加,完成最简单的总和的实现。

前文中也提到,reduce函数的返回结果类型和传入的初始值相同,上个实例中初始值为number类型,同理,初始值也可为object类型。


var items = [10, 120, 1000];

// our reducer function
var reducer = function add(sumSoFar, item) {
  sumSoFar.sum = sumSoFar.sum + item;
  return sumSoFar;
};

// do the job
var total = items.reduce(reducer, {sum: 0});

console.log(total); // {sum:1130}
 

多重叠加

使用reduce方法可以完成多维度的数据叠加。如上例中的初始值{sum: 0},这仅仅是一个维度的操作,如果涉及到了多个属性的叠加,如{sum: 0,totalInEuros: 0,totalInYen: 0},则需要相应的逻辑进行处理。

在下面的方法中,采用分而治之的方法,即将reduce函数第一个参数callback封装为一个数组,由数组中的每一个函数单独进行叠加并完成reduce操作。所有的一切通过一个manager函数来管理流程和传递初始参数。

var manageReducers = function(reducers) {
  return function(state, item) {
    return Object.keys(reducers).reduce(
      function(nextState, key) {
        reducers[key](state, item);
        return state;
      },
      {}
    );
  }
};

上面就是manager函数的实现,它需要reducers对象作为参数,并返回一个callback类型的函数,作为reduce的第一个参数。在该函数内部,则执行多维的叠加工作(Object.keys())。

通过这种分治的思想,可以完成目标对象多个属性的同时叠加,完整代码如下:

var reducers = {  
  totalInEuros : function(state, item) {
    return state.euros += item.price * 0.897424392;
  },
  totalInYen : function(state, item) {
    return state.yens += item.price * 113.852;
  }
};

var manageReducers = function(reducers) {
  return function(state, item) {
    return Object.keys(reducers).reduce(
      function(nextState, key) {
        reducers[key](state, item);
        return state;
      },
      {}
    );
  }
};

var bigTotalPriceReducer = manageReducers(reducers);

var initialState = {euros:0, yens: 0};

var items = [{price: 10}, {price: 120}, {price: 1000}];

var totals = items.reduce(bigTotalPriceReducer, initialState);

console.log(totals);

举例说一些内建函数

...接使用的。我们常见的运算符也是内建函数大于>对应的内建比较函数为__gt__()大于等于>=对应的内建比较函数为__ge__()等于==对应的内建比较函数为__eq__()小于<对应的内建比较函数 查看详情

一文搞懂python的内建函数,自己添加一个print函数(代码片段)

目录1、什么是内建函数?2、内置的内建函数多有哪些?3、特殊函数说明3.1exec3.2eval3.3compile3.4globals和locals4、自己增加一个内置函数5、总结写python的同学应该都用过print函数,这个函数我们没有定义为什么可以调用... 查看详情

字符串的内建函数

Python的字符串内建函数Python的字符串常用内建函数如下: 序号方法及描述1capitalize()将字符串的第一个字符转换为大写2center(width,fillchar)返回一个指定的宽度width居中的字符串,fillchar为填充的字符,默认为空格。3count(str,beg=0,... 查看详情

一文搞懂python的内建函数,自己添加一个print函数(代码片段)

目录1、什么是内建函数?2、内置的内建函数多有哪些?3、特殊函数说明3.1exec3.2eval3.3compile3.4globals和locals4、自己增加一个内置函数5、总结写python的同学应该都用过print函数,这个函数我们没有定义为什么可以调用... 查看详情

javascript中内建函数reduce的应用详解

参考技术A前言一般而言,可以通过reduce方法实现的逻辑都可以通过forEach方法来变相的实现,虽然不清楚浏览器的js引擎是如何在C++层面实现这两个方法,但是可以肯定的是reduce方法肯定也存在数组的遍历,在具体实现细节上... 查看详情

字符串的内建函数

 方法描述string.capitalize()把字符串的第一个字符大写string.center(width)返回一个原字符串居中,并使用空格填充至长度width的新字符串string.count(str,beg=0,end=len(string))返回str在string里面出现的次数,如果beg或者end指定则返回指定范围... 查看详情

序列类型(列表和元祖包括字符串等)通用的的内建函数

在python中,有许多序列的内建函数,部分函数的使用范围更广,适用于可迭代对象。一些常见的序列类型的内置函数。序号函数   功能                  ... 查看详情

类的内建函数和用来定制类的特殊方法

两个类的内建函数一:isinstance()1classP1():23def__init__(self,name):4self.name=name5pass67classP2(P1):8A=P1(‘wang‘)#定义类属性!!9B=P1(‘zi‘)1011print(P2.__dict__)12fori,vinP2.__dict__.items():13ifi==‘A‘:14print(v)15p 查看详情

12.为组件的内建信号编写槽函数(代码片段)

//自动关联槽函数1.清空  - 选中清空按钮右键->Gotoslot->clicked()    #QpushButton类的按钮常用的信号是clicked,就是点击发射信号  - 复制函数名称在myDialog.py文件的QmyDialog类下定义同名函数defon_btnClear_clicked(self):s... 查看详情

面向对象之类的内建函数

类的特殊成员上文介绍了Python的类成员以及成员修饰符,从而了解到类中有字段、方法和属性三大类成员,并且成员名前如果有两个下划线,则表示该成员是私有成员,私有成员只能由类内部调用。无论人或事物往往都有不按套... 查看详情

面向对象高级编程——类实例及其他对象的内建函数

 内建函数描   述issubclass(sub,sup)如果类sub是类sub的子类,则返回True,反之为Falseisinstance(obj1,obj2)如果实例obj是类obj2或者obj2子类的一个实例,则返回True,反之为Falsehasattr(obj,attr)如果obj有属性attr,则返回Truegetattr(obj... 查看详情

python中字典的内建函数用法是啥?

Python中字典的内建函数用法是什么‍点击上方"Python人工智能技术"关注,星标或者置顶22点24分准时推送,第一时间送达后台回复“大礼包”,送你特别福利编辑:乐乐|来自:pypypypy上一篇:正文大家好,我是Pythn人工... 查看详情

内建函数(常用)

...-inFunctions,中文可以称为内建函数。内建函数就像dos系统的内部命令,他不依赖于外部模块。内建函数就是:安装好Python后就可以直接使用的函数,不需要import任何模块 基本的内建函数:int, str, list, tuple, set,&... 查看详情

socket()模块和套接字对象的内建方法

一、socket()模块函数要使用socket.socket()函数来创建套接字,其语法如下:socket(socket_family,socket_type,protocol=0)如上所述,scoket_family不是AF_UNIX就是AF_INET,scoket_type可以是SOCK_STREAM或SOCK_DGRAM,protocol一般不填,默认值为0.创建一个TCP/IP... 查看详情

第五篇--为组件的内建信号编写槽函数(代码片段)

学习书籍《PythonQtGUI与数据可视化编程》上一节学习的是内部自带的槽函数,这一节学习自己为组件编写槽函数。回忆一下上一节的图我们把确定按钮绑定了accept()函数,把退出按钮绑定了close()函数。接下来,我们来看一下清空... 查看详情

centos中的内建命令与普通命令的区别

查看详情

什么是bashshell的内建(buildin)命令

1.什么是buildin命令:shell内建命令是指bash(或其它版本)工具集中的命令。一般都会有一个与之同名的系统命令,比如bash中的echo命令与/bin/echo是两个不同的命令,尽管他们行为大体相仿。当在bash中键入一个命令时系统会先看他... 查看详情

python基础之常见内建函数

参考技术Amap()函数接受两个参数,一个是函数,一个是可迭代对象(Iterable),map将传入的函数依次作用到可迭代对象的每一个元素,并把结果作为迭代器(Iterator)返回。举例说明,有一个函数f(x)=x^2,要把这个函数作用到一个list[1... 查看详情