189 8069 5689

javascript中内,javascript中!

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

前言

站在用户的角度思考问题,与客户深入沟通,找到北碚网站设计与北碚网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、网站制作、企业官网、英文网站、手机端网站、网站推广、主机域名、网页空间、企业邮箱。业务覆盖北碚地区。

一般而言,可以通过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);

总结

以上就是Javascript中内建函数reduce应用的全部内容,希望本文的内容对大家的学习或者工作能有所帮助,如果有疑问大家可以留言交流。

js中的内建对象有哪些,至少写出3个。

JavaScript对象有三种:

1.内建对象:JS中已经定义好的对象

2.宿主对象:执行JS脚本的环境提供的对象

3.自定义对象:顾名思义,就是开发人员自己定义的对象

内建对象有很多,但是常用的有String、Array、Math、Date、Boolean、Number、Event、RegExp等。

在js中,内建对象Object,Function等之间的关系

一、从定义的角度来说:

function Function(){}

前者为定义一个js函数

后者为这个函数的名称

Object为选择的DOM对象

二、从用法讲:

var a = new Object(function(){});

这里a也是function了。

三、总结:

不管是function ,还是new Function(), 还是new Object(function(){}),当解释器(例如V8)遇到时,则将它们初始化成一个函数(最主要的是给其添加了一个[[call]]属性)。

javascript中,“函数”(方法)也是对象。

一切对象都有一个根源。它是Object.prototype。

根源之上再没有其他根源。Object.getPrototypeOf(Object.prototype)是null。js中除字面量以外的一切引用对象都来自这个“根源”对象。

表达式Object.getPrototypeOf(Function) === Function.prototype的结果是真。这是Function特有的。实际上Function的prototype是一个内置函数,一切函数都派生自这个内置函数,这个内置函数是一个函数工厂。这个内置函数对象的prototype指向“根源”对象。

表达式Object.prototype === Object.getPrototypeOf(Function.prototype)的结果是真。说明了Object跟Function二者之间的联系,是通过“根源”对象联系起来的。

Function和Object,既是函数,因为都可以Function()或者Object()这样的方式执行,又是对象,因为可以Function.a = 'a',Object.a = 'a'这样赋值。

说它们是函数,是因为他们都是通过上面第4条中说的”内置函数工厂“,派生出来的,因而具备函数的特性。

说他们是对象。是因为他们都是通过上面第1条中的”根源“对象,派生出来的,因此具备对象的特征。

继续说一下,Function.prototype指向”内置函数“。而Object.prototype指向”根源对象“。

因而new Function会产生一个匿名函数,而new Object产生一个plain object。

他们之间的关系简单描述就像下面这样。


网页名称:javascript中内,javascript中!
文章分享:http://cdxtjz.cn/article/dsgppeo.html

其他资讯