本文详细解析JavaScript中Array.prototype.reduce()方法的语法、参数含义及返回值。针对不支持该方法的旧版浏览器,提供了完整的ECMA-262标准兼容脚本实现。通过具体示例展示如何利用reduce进行数组元素累加计算,帮助开发者掌握数组归并技巧。
reduce()方法语法与参数
JavaScript 数组的 reduce() 方法用于遍历数组,将回调函数应用于数组的每个元素(从左至右),最终将其归约为单个值。其基本语法如下:
array.reduce(callback[, initialValue]);
该方法包含以下详细参数说明:
- callback:在数组的每个值上执行的函数。
- initialValue:作为回调函数第一次调用时使用的对象。
返回值:
返回经过归约计算后的单个值。
浏览器兼容性处理
此方法为 JavaScript 对 ECMA-262 标准的扩展;故其他标准实现中可能不存在。为确保其运行,需在代码顶部添加以下脚本:
if (!Array.prototype.reduce)
{
Array.prototype.reduce = function(fun /*, initial*/)
{
var len = this.length;
if (typeof fun != "function")
throw new TypeError();
// no value to return if no initial value and an empty array
if (len == 0 && arguments.length == 1)
throw new TypeError();
var i = 0;
if (arguments.length >= 2)
{
var rv = arguments[1];
}
else
{
do
{
if (i in this)
{
rv = this[i++];
break;
}
// if array contains no values, no initial value to return
if (++i >= len)
throw new TypeError();
}
while (true);
}
for (; i < len; i++)
{
if (i in this)
rv = fun.call(null, rv, this[i], i, this);
}
return rv;
};
}
该方法属于 JavaScript 对 ECMA-262 标准的扩展,因此在部分标准的其他实现中可能不存在。为确保兼容性,需在脚本顶部添加以下代码:
<html>
<head>
<title>JavaScript Array reduce Method</title>
</head>
<body>
<script type="text/javascript">
if (!Array.prototype.reduce)
{
Array.prototype.reduce = function(fun /*, initial*/)
{
var len = this.length;
if (typeof fun != "function")
throw new TypeError();
// no value to return if no initial value and an empty array
if (len == 0 && arguments.length == 1)
throw new TypeError();
var i = 0;
if (arguments.length >= 2)
{
var rv = arguments[1];
}
else
{
do
{
if (i in this)
{
rv = this[i++];
break;
}
// if array contains no values, no initial value to return
if (++i >= len)
throw new TypeError();
}
while (true);
}
for (; i < len; i++)
{
if (i in this)
rv = fun.call(null, rv, this[i], i, this);
}
return rv;
};
}
var total = [0, 1, 2, 3].reduce(function(a, b){ return a + b; });
document.write("total is : " + total );
</script>
</body>
</html>
代码示例与结果
示例演示:
total is : 6