高阶函数

  • 编写高阶函数,就是让函数的参数能够接收别的函数。
  1. function add(x, y, f) {
  2. return f(x) + f(y);
  3. }
  4. var x =add(-5, 6, Math.abs)
  5. console.log(x);//11
  • 推导过程

    1. x = -5;
    2. y = 6;
    3. f = Math.abs;
    4. f(x) + f(y) ==> Math.abs(-5) + Math.abs(6) ==> 11;
    5. return 11;

    map()

  • 由于map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果:

  • map()传入的参数是pow,即函数对象本身。

    1. function pow(x) {
    2. return x * x;
    3. }
    4. var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    5. var results = arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81]
    6. console.log(results);

    把Array的所有数字转为字符串:

    1. var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    2. arr.map(String); // ['1', '2', '3', '4', '5', '6', '7', '8', '9']

    把Array的所有字符串转为数字:

    1. var arr = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];
    2. 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” ]

  1. <a name="savdm"></a>
  2. ### reduce
  3. - 这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算,其效果就是:
  4. `[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)`
  5. <a name="EzUwX"></a>
  6. #### 求和
  7. ```javascript
  8. var arr = [1, 3, 5, 7, 9];
  9. arr.reduce(function (x, y) {
  10. return x + y;
  11. }); // 25

求积

  1. var arr = [1, 3, 5, 7, 9];
  2. arr.reduce(function (x, y) {
  3. return x*y;
  4. }); // 25
  1. function product(arr) {
  2. return arr.reduce((x,y)=>{return x*y})
  3. }
  4. // 测试:
  5. if (product([1, 2, 3, 4]) === 24 && product([0, 1, 2]) === 0 && product([99, 88, 77, 66]) === 44274384) {
  6. console.log('测试通过!');
  7. }
  8. else {
  9. console.log('测试失败!');
  10. }

数组变整数

  • [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
  1. <a name="PK9nK"></a>
  2. #### 字符串变成数字
  3. - 先把字符串变数组,再利用reduce()转换成number
  4. ```javascript
  5. //字符串变数组
  6. function string2int(s) {
  7. var arr=[];
  8. for(var i of s){
  9. arr.push(i)
  10. }
  11. return arr
  12. }
  13. string2int('1243') //['1','2','4','3' ]
  • 再利用reduce()就可以写出一个把字符串转换为Number的函数
    1. function string2int(s) {
    2. var arr=[];
    3. for(var i of s){
    4. arr.push(i)
    5. }
    6. return arr.map(i=>(i*1)).reduce((x,y)=>(x*10+y))
    7. }
    8. string2int('1243')