假設我們有個數組,每個元素是一個人,你面前站了一排人。
foreach 就是你按順序一個一個跟他們說做點什麼,具體做什麼:
people.forEach(function (dude) {
dude.pickUpSoap();
});
map 就是你手裡拿一個盒子(一個新數組),一個個叫他們把錢包扔進去。結束的時候你獲得一個新數組,裡面是大家的錢包,錢包順序和人的順序一 一對應。
var wallets = people.map(function (dude) {
return dude.wallet;
});
reduce 就是你拿着錢包,一個個數過去看裡面有多少錢,每檢查一個,就和前面綜合加起來,結束時候就知道總共多少錢了。
var totalMoney = wallets.reduce(function (countedMoney, wallet) {
return countedMoney + wallet.money;
}, 0);
filter 就是你每個錢包數過去的時候,裡面錢少于100塊的不要(留在原來盒子裡),大于100塊的丢到新盒子裡,這樣結束的時候就有了一個新數組,裡面都是大于100的錢包。
var fatWallets = wallets.filter(function (wallet) {
return wallet.money > 100;
});
總結:map和filter隻會傳回一個新數組,不會改變原來那個數組。