• JavaScript--map()&reduce()


    map()
    由于map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果
     
    比如我们有一个函数f(x)=x2,要把这个函数作用在一个数组
    'use strict';
    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']
     
    错误用法:
    'use strict';
    var arr = ['1', '2', '3'];
    var r;
    r = arr.map(parseInt);
    parseInt函数默认传递两个参数:
    1,需要转换成数字的字符串;
    2,基数(转换成的数字是以什么进制显示,例如2,就是2进制,默认或者等于0,为十进制显示,小于2或者大于36,parseInt()返回NaN).
    这样就很好理解这道题出的问题了。
    map(),参数为一个函数,这个函数默认参数有三个,1:元素值 2:元素值的下标 3:调用者本身(在这里是arr这个数组)。
    正确用法:
    r = arr.map(function(x){
      return parseInt(x)
    });
     
    reduce()
    格式:arr.reduce(callback[, initialValue])
    • callback (执行数组中每个值的函数,包含四个参数)
    • previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
    • currentValue (数组中当前被处理的元素)
    • index (当前元素在数组中的索引)
    • array (调用 reduce 的数组)
    • initialValue (作为第一次调用 callback 的第一个参数。)
    Array的reduce()把一个函数作用在Array上,这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算
    比方说对一个Array求和:
    var arr = [1, 3, 5, 7, 9];
    arr.reduce(function (x, y) {
        return x + y;
    }); // 25
    要把[1, 3, 5, 7, 9]变换成整数13579:
    var arr = [1, 3, 5, 7, 9];
    arr.reduce(function (x, y) {
        return x * 10 + y;
    }); // 13579
     
    实现一个string2int()函数:
    arr.split('').map(function (x){ return +x;}).reduce(function (x,y){return x * 10 + y;});
    JavaScript中的‘-’号有一个隐式转换 字符串减去0会把字符串默认转换成数字,这也算个小技巧吧 +号的会把数字默认转换成字符串再进行连接
     
    reduce源码
    if (typeof Array.prototype.reduce != "function") {
      Array.prototype.reduce = function (callback, initialValue ) {
         var previous = initialValue, k = 0, length = this.length;
         if (typeof initialValue === "undefined") {
            previous = this[0];
            k = 1;
         }
         
        if (typeof callback === "function") {
          for (k; k < length; k++) {
             this.hasOwnProperty(k) && (previous = callback(previous, this[k], k, this));
          }
        }
        return previous;
      };
    }

  • 相关阅读:
    005 Python的IDE之Pycharm的使用
    006 Python的IDE之Jupyter的使用
    004 pip的使用
    003 Python解释器源修改
    002 Python解释器安装
    BZOJ 4567 [SCOI2016]背单词 (Trie树、贪心)
    BZOJ 2085 luogu P3502 [POI2010]Hamsters (KMP、Floyd、倍增)
    UOJ #219 BZOJ 4650 luogu P1117 [NOI2016]优秀的拆分 (后缀数组、ST表)
    UOJ #214 [UNR #1]合唱队形 (概率期望计数、DP、Min-Max容斥)
    LOJ #2542 [PKUWC2018]随机游走 (概率期望、组合数学、子集和变换、Min-Max容斥)
  • 原文地址:https://www.cnblogs.com/absoluteli/p/14092806.html
Copyright © 2020-2023  润新知