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
點擊加載更多評論>>