<script>
// 编程范式: 命令式编程 / 声明式编程
// 编程范式: 面向对象编程(第一公民:对象) / 函数式编程(第一公民:函数)
// filter / map / reduce
// filter中的回调函数有一个要求:必须返回一个布尔值
// true: 当返回true时 函数内部自动将这次回调的 n 加到新的数组中
// false:当返回false时 函数内部会过滤这次的 n
// 1. 找出数组中小于50的元素
const nums = [45, 7, 44, 51, 875, 45, 38, 77];
// let newNums = [];
// let minNums = [];
// for (let i of nums) { //用for...of遍历
// if (i > 50) {
// newNums.push(i);
// }
// }
let newNums = nums.filter(function(n) {
return n < 50;
});
console.log(newNums); // [45, 7, 44, 45, 38] 用filter筛选 返回true就添加到新的数组中
// 2.将小于50的元素*2
// for (let i of nums) {
// if (i < 50) {
// minNums.push(i * 2)
// }
// }
// console.log(minNums);
// 用map找出小于50的元素 *2
let minNums = newNums.map(function(n) { // 用map 可以操作之前的数组元素 进行计算 返回一个新的数组
return n * 2;
})
console.log(minNums);
// 3.将minNums的每一个数组元素 相加
// let max = 0;
// for (let i of minNums) {
// max += i;
// }
// console.log(max);
// 4.reduce(回调函数,初始值0) 函数的使用
// reduce的作用是对函数的所有参数进行汇总
let arr = [10, 20, 30, 40, 50, 60];
let newArr = arr.reduce(function(preValue, n) { // 回调函数里面第一个值是上一轮遍历返回的值 n是遍历当前的数组元素
return preValue + n;
// 第一轮遍历 初始值是 0 + 遍历的第一个元素 10 = 10
// 第二轮遍历 上一轮返回 10 + 遍历的第二个元素 20 = 30
// 以此类推
}, 0)
console.log(newArr);
</script>