需求:
const nums = [10, 20, 40, 50, 222, 333, 444]
1.取出所有小于100的数字
2.将所有的小于100的数字进行转换:全部*2
3.将所有new2Nums数字相加,得到最终的结果
方法一:
1.取出所有小于100的数
for (let n of nums) {
if( n < 100 ) {
newNuws.push(n)
}
}
2.将第一步取出的数 * 2
new2Nuws = []
for (let n of newNuws) {
new2Nuws.push(n*2)
}
3.将第二步的数全部相加,并打印结果
let total = 0;
for (let n of new2Nuws){
total += n;
}
console.log(total);
方法二(使用filter map reduce)
let newNums1 = nums.filter(function (n) {
return n <= 100
})
console.log(newNums1);
//2.map
let new2Nums2 = newNums1.map(function (n) {
return n*2
})
let total1 = new2Nums2.reduce(function (preValue, n) {
return preValue + n
}, 0)
console.log(total1);
解析:
filter中的回调函数必须返回一个boolean值,在遍历数组时,每次取出数组中的一个元素进行操作。当返回true时,函数内部会自动将这次回调的n加入到新的数组中,当返回false时,函数内部会自动过滤掉这次的n。
map函数在遍历数组时,每次从数组中取出一个是并进行操作。
3.reduce函数的使用 new2Nums2=[20, 40, 80, 100] reduce作用,对数组中的所有内容进行汇总reduce(function(), 0) 第一次:preValue 0 n 20 第二次:preValue 20 n 40 第三次:preValue 60 n 80 第四次:preValue 140 n 100 let total1 = new2Nums2.reduce(function (preValue, n) { return preValue + n }, 0) console.log(total1);
3.函数式编程
方法1
let totals = nums.filter(function (n) {
return n <= 100
}).map(function (n) {
return n * 2
}).reduce(function (preValue, n) {
return preValue + n;
}, 0)
console.log(totals);
方法2
let total2 = nums.filter(n => n < 100).map(n => n * 2).reduce((pre, n) => pre + n);
console.log(total2);