map
定義:對(duì)數(shù)組中的每個(gè)元素進(jìn)行處理馅扣,得到新的數(shù)組;
特點(diǎn):不改變?cè)瓟?shù)組着降;
舉例說(shuō)明差油,比如我們有一個(gè)函數(shù)f(x)=x的平方,要把這個(gè)函數(shù)作用在一個(gè)數(shù)組[1, 2, 3, 4, 5, 6, 7, 8, 9]上任洞,就可以用map實(shí)現(xiàn)如下:
由于map()方法定義在JavaScript的Array中蓄喇,我們調(diào)用Array的map()方法,傳入我們自己的函數(shù)交掏,就得到了一個(gè)新的Array作為結(jié)果:
function pow(x) {
????return x * x;
}
var arr = [1,2,3,4,5,6,7,8,9];
arr.map(pow);// [1, 4, 9, 16, 25, 36, 49, 64, 81]
map()傳入的參數(shù)是pow妆偏,即函數(shù)對(duì)象本身。
map()作為高階函數(shù)盅弛,事實(shí)上它把運(yùn)算規(guī)則抽象了钱骂,因此,我們不但可以計(jì)算簡(jiǎn)單的f(x)=x2挪鹏,還可以計(jì)算任意復(fù)雜的函數(shù)见秽,比如,把Array的所有數(shù)字轉(zhuǎn)為字符串:
var arr = [1,2,3,4,5,6,7,8,9];
arr.map(String);// ['1', '2', '3', '4', '5', '6', '7', '8', '9']
只需要一行代碼讨盒。
reduce
再看reduce的用法解取。Array的reduce()把一個(gè)函數(shù)作用在這個(gè)Array的[x1, x2, x3...]上,這個(gè)函數(shù)必須接收兩個(gè)參數(shù)返顺,reduce()把結(jié)果繼續(xù)和序列的下一個(gè)元素做累積計(jì)算禀苦,其效果就是:
[x1, x2, x3, x4].reduce( f(x,y) ) //相當(dāng)于 f(f(f(x1, x2), x3), x4)
比方說(shuō)對(duì)一個(gè)Array求和蔓肯,就可以用reduce實(shí)現(xiàn):
var arr = [1,3,5,7,9];
arr.reduce(function(x, y) {
????return x + y;
});// 25
練習(xí):利用reduce()求積:
function product(arr) {
????return arr.reduce(function (x,y) {
????????return parseInt(x)*parseInt(y);
????});
}
// 測(cè)試:
if (product([1, 2, 3, 4]) === 24 && product([0, 1, 2]) === 0 && product([99, 88, 77, 66]) === 44274384) {
? ? alert('測(cè)試通過(guò)!');
}else {
? ? alert('測(cè)試失敗!');
}
filter
var?ages = [32,?33,?16,?40];
function?checkAdult(age) {
?return?age >=?18;
}
function?myFunction() {
??? document.getElementById("demo").innerHTML = ages.filter(checkAdult);
}