假设我们有一个数组,每个元素是一个人。你面前站了一排人。
forEach
就是你按顺序一个一个跟他们说要做什么
peoples.forEach(function(people) {
people.doSomething()
});
map
就是你手里拿一个盒子(一个新的数组),一个一个叫他们把钱包扔进去,结束的时候你获得了一个新的数组,里面是大家的钱包,钱包的顺序和人的书序一一对应。
var wallets = people.map(function(people) {
return people.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 都是 immutable methods,也就是说会返回一个新数组,而不会改变原数组的。