高阶函数
- 编写高阶函数,就是让函数的参数能够接收别的函数。
function add(x, y, f) {return f(x) + f(y);}var x =add(-5, 6, Math.abs)console.log(x);//11
推导过程
x = -5;y = 6;f = Math.abs;f(x) + f(y) ==> Math.abs(-5) + Math.abs(6) ==> 11;return 11;
map()
由于map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果:
map()传入的参数是pow,即函数对象本身。
function pow(x) {return x * x;}var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];var results = arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81]console.log(results);
把Array的所有数字转为字符串:
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];arr.map(String); // ['1', '2', '3', '4', '5', '6', '7', '8', '9']
把Array的所有字符串转为数字:
var arr = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];arr.map(i=>(i*1)) //[1, 2, 3, 4, 5, 6, 7, 8, 9]
练习
把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。
- 输入:[‘adam’, ‘LISA’, ‘barT’],输出:[‘Adam’, ‘Lisa’, ‘Bart’]。
```javascript function normalize(arr) { return arr.map(name=>name[0].toUpperCase()+name.substring(1).toLowerCase())
} normalize([‘adam’, ‘LISA’, ‘barT’]) //[ “Adam”, “Lisa”, “Bart” ]
<a name="savdm"></a>### reduce- 这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算,其效果就是:`[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)`<a name="EzUwX"></a>#### 求和```javascriptvar arr = [1, 3, 5, 7, 9];arr.reduce(function (x, y) {return x + y;}); // 25
求积
var arr = [1, 3, 5, 7, 9];arr.reduce(function (x, y) {return x*y;}); // 25
function product(arr) {return arr.reduce((x,y)=>{return x*y})}// 测试:if (product([1, 2, 3, 4]) === 24 && product([0, 1, 2]) === 0 && product([99, 88, 77, 66]) === 44274384) {console.log('测试通过!');}else {console.log('测试失败!');}
数组变整数
- [1, 3, 5, 7, 9]变换成整数13579
```javascript var arr = [1, 3, 5, 7, 9]; arr.reduce(function (x, y) { return x 10 + y;//{[(110+3)10+5]10+7}*10+9 }); // 13579
<a name="PK9nK"></a>#### 字符串变成数字- 先把字符串变数组,再利用reduce()转换成number```javascript//字符串变数组function string2int(s) {var arr=[];for(var i of s){arr.push(i)}return arr}string2int('1243') //['1','2','4','3' ]
- 再利用reduce()就可以写出一个把字符串转换为Number的函数
function string2int(s) {var arr=[];for(var i of s){arr.push(i)}return arr.map(i=>(i*1)).reduce((x,y)=>(x*10+y))}string2int('1243')
