JavaScript 數(shù)組匯總
■知識點(diǎn)
使用reduce方法可以對數(shù)組中的所有元素調(diào)用指定的回調(diào)函數(shù)。該回調(diào)函數(shù)的返回值為累積結(jié)果,并且此返回值在下一次調(diào)用該回調(diào)函數(shù)時作為參數(shù)提供。
array.reduce(callbackfn[, initialValue])
參數(shù)說明如下。
callbackfn:對于數(shù)組中的每個元素,reduce方法都會調(diào)用callbackfh函數(shù)一次。
initialValue:可選參數(shù)。如果指定initialValue,則它將用作初始值來啟動累積。第1次調(diào)用
callbackfn函數(shù)會將此值作為參數(shù)而非數(shù)組值提供。
如果提供了參數(shù)initialValue,則reduce方法會對數(shù)組中的每個元素調(diào)用一次callbackfn函數(shù)(按升序索引順序)。如果未提供initialValue,則reduce方法會對從第2個元素開始的每個元素調(diào)用callbackfn函數(shù)。
回調(diào)函數(shù)的語法如下:
function callbackfn(previousValue, currentValue, currentlndex, array)
回調(diào)函數(shù)的參數(shù)說明如下。
previousValue:通過上一次調(diào)用回調(diào)函數(shù)獲得的值。如果向reduce方法提供initialValue,則在 首次調(diào)用函數(shù)時,previousValue 為 initialValue。 currentValue:當(dāng)前數(shù)組元素的值。
currentlndex:當(dāng)前數(shù)組元素的數(shù)字索引。
array:包含該元素的數(shù)組對象。
reduceRight與reduce方法用法相同,不過它是從右向左對數(shù)組中的所有元素調(diào)用指定的回調(diào)函數(shù)。該回調(diào)函數(shù)的返回值為累積結(jié)果。
■實(shí)例設(shè)計(jì)
【示例1】下面的示例演示了將數(shù)組值連接成字符串,各個值用“::”分隔開。由于未向reduce方法提供初始值,第1次調(diào)用回調(diào)函數(shù)時會將“abc”作為previousValue參數(shù),同時并將“def”作為currentValue 參數(shù)。
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】下面的示例向數(shù)組中添加值。currentlndex和array參數(shù)用于回調(diào)函數(shù)。
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】下面的示例獲取一個數(shù)組,該數(shù)組僅包含另一個數(shù)組中的介于1?10的值,提供給reduce方法的初始值是一個空數(shù)組。
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方法,以"::"為分隔符,從右到左把數(shù)組元素的值連接在一起。
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
點(diǎn)擊加載更多評論>>