JavaScript 数组汇总
■知识点
使用reduce方法可以对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。
array.reduce(callbackfn[, initialValue])
参数说明如下。
callbackfn:对于数组中的每个元素,reduce方法都会调用callbackfh函数一次。
initialValue:可选参数。如果指定initialValue,则它将用作初始值来启动累积。第1次调用
callbackfn函数会将此值作为参数而非数组值提供。
如果提供了参数initialValue,则reduce方法会对数组中的每个元素调用一次callbackfn函数(按升序索引顺序)。如果未提供initialValue,则reduce方法会对从第2个元素开始的每个元素调用callbackfn函数。
回调函数的语法如下:
function callbackfn(previousValue, currentValue, currentlndex, array)
回调函数的参数说明如下。
previousValue:通过上一次调用回调函数获得的值。如果向reduce方法提供initialValue,则在 首次调用函数时,previousValue 为 initialValue。 currentValue:当前数组元素的值。
currentlndex:当前数组元素的数字索引。
array:包含该元素的数组对象。
reduceRight与reduce方法用法相同,不过它是从右向左对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果。
■实例设计
【示例1】下面的示例演示了将数组值连接成字符串,各个值用“::”分隔开。由于未向reduce方法提供初始值,第1次调用回调函数时会将“abc”作为previousValue参数,同时并将“def”作为currentValue 参数。
function f (pre, curr) {
return pre + n::n + curr;
}
var a = ["abc", ndef", 123, 456];
var r = a.reduce(f);
console.log(r); //abc::def::123::456
【示例2】下面的示例向数组中添加值。currentlndex和array参数用于回调函数。
function f(pre, curr, i, array) {
var e = (array.length - 1) - i;
var d = curr * Math.pow(10, e);
return pre + d;
}
var a = [4, 1, 2, 5];
var r = a.reduce(f, 0);
console.log (r); //4125
【示例3】下面的示例获取一个数组,该数组仅包含另一个数组中的介于1〜10的值,提供给reduce方法的初始值是一个空数组。
function f(pre, curr) {
var next;
if (curr >= 1 && curr <= 10)
next = pre.concat(curr);
else
next = pre;
return next;
}
var al = [20, 1, -5, 6, 50, 3];
var a = new Array();
var r = al.reduce(f, a);
console.log(r); //l,6,3
【示例4】下面的示例使用了 reduceRight方法,以"::"为分隔符,从右到左把数组元素的值连接在一起。
function f (pre, curr) {
return pre + "::" + curr;
}
var a = ["abcn,"def", 123, 456];
var r = a.reduceRight(f);
console.log(r); //456::123::def::abc
点击加载更多评论>>