JavaScript中reduce()方法的使用详解
JavaScript数组reduce()方法同时应用一个函数针对数组的两个值(从左到右),以减至一个值。
语法
array.reduce(callback[,initialValue]);
下面是参数的详细信息:
- callback:函数执行在数组中每个值
- initialValue:对象作为第一个参数回调的第一次调用使用
返回值:
返回数组的减少单一个值
兼容性:
这种方法是一个JavaScript扩展到ECMA-262标准;因此它可能不存在在标准的其他实现。为了使它工作,你需要添加下面的脚本代码的顶部:
if(!Array.prototype.reduce)
{
Array.prototype.reduce=function(fun/*,initial*/)
{
varlen=this.length;
if(typeoffun!="function")
thrownewTypeError();
//novaluetoreturnifnoinitialvalueandanemptyarray
if(len==0&&arguments.length==1)
thrownewTypeError();
vari=0;
if(arguments.length>=2)
{
varrv=arguments[1];
}
else
{
do
{
if(iinthis)
{
rv=this[i++];
break;
}
//ifarraycontainsnovalues,noinitialvaluetoreturn
if(++i>=len)
thrownewTypeError();
}
while(true);
}
for(;i<len;i++)
{
if(iinthis)
rv=fun.call(null,rv,this[i],i,this);
}
returnrv;
};
}
例子:
<html>
<head>
<title>JavaScriptArrayreduceMethod</title>
</head>
<body>
<scripttype="text/javascript">
if(!Array.prototype.reduce)
{
Array.prototype.reduce=function(fun/*,initial*/)
{
varlen=this.length;
if(typeoffun!="function")
thrownewTypeError();
//novaluetoreturnifnoinitialvalueandanemptyarray
if(len==0&&arguments.length==1)
thrownewTypeError();
vari=0;
if(arguments.length>=2)
{
varrv=arguments[1];
}
else
{
do
{
if(iinthis)
{
rv=this[i++];
break;
}
//ifarraycontainsnovalues,noinitialvaluetoreturn
if(++i>=len)
thrownewTypeError();
}
while(true);
}
for(;i<len;i++)
{
if(iinthis)
rv=fun.call(null,rv,this[i],i,this);
}
returnrv;
};
}
vartotal=[0,1,2,3].reduce(function(a,b){returna+b;});
document.write("totalis:"+total);
</script>
</body>
</html>
这将产生以下结果:
totalis:6