• JS中数组的内建函数说明


    函数简述

    map():返回一个新的Array,每个元素为调用func的结果

    filter():返回一个符合func条件的元素数组

    some():返回一个boolean,判断是否有元素是否符合func条件

    every():返回一个boolean,判断每个元素是否符合func条件

    forEach():没有返回值,只是针对每个元素调用func

    API的区别

    function my_func(item) {
      if (item == 1) {
        console.log('t');
        return true;
      }
      console.log('f');
      return false;
    }
    
    // init an array
    l = [0,1,2,3,4]
    
    // print: f,t,f,f,f
    // return:[false, true, false, false, false]
    l.map(my_func)
    
    
    // print: f,t,f,f,f
    // return: 1
    l.filter(my_func)
    
    // print: f,t
    // return: true
    l.some(my_func)
    
    // print: f
    // return: false
    l.every(my_func)
    
    // print: f,t,f,f,f
    //return: undefined
    l.forEach(my_func)

    实现方式

    Array.prototype.map = function(fun /*, thisp*/)
    {
      var len = this.length;
      if (typeof fun != "function")
        throw new TypeError();
    
      var res = new Array(len);
      var thisp = arguments[1];
      for (var i = 0; i < len; i++)
      {
        if (i in this)
          res[i] = fun.call(thisp, this[i], i, this);
      }
    
      return res;
    };
    
    Array.prototype.filter = function(fun /*, thisp*/)
    {
      var len = this.length;
      if (typeof fun != "function")
        throw new TypeError();
    
      var res = new Array();
      var thisp = arguments[1];
      for (var i = 0; i < len; i++)
      {
        if (i in this)
        {
          var val = this[i]; // in case fun mutates this
          if (fun.call(thisp, val, i, this))
            res.push(val);
        }
      }
    
      return res;
    };
    
    Array.prototype.some = function(fun /*, thisp*/)
    {
      var len = this.length;
      if (typeof fun != "function")
        throw new TypeError();
    
      var thisp = arguments[1];
      for (var i = 0; i < len; i++)
      {
        if (i in this && fun.call(thisp, this[i], i, this))
          return true;
      }
    
      return false;
    };
    
    Array.prototype.every = function(fun /*, thisp*/)
    {
      var len = this.length;
      if (typeof fun != "function")
        throw new TypeError();
    
      var thisp = arguments[1];
      for (var i = 0; i < len; i++)
      {
        if (i in this && !fun.call(thisp, this[i], i, this))
        return false;
      }
    
      return true;
    };
    
    Array.prototype.forEach = function(fun /*, thisp*/)
    {
      var len = this.length;
      if (typeof fun != "function")
        throw new TypeError();
    
      var thisp = arguments[1];
      for (var i = 0; i < len; i++)
      {
        if (i in this)
          fun.call(thisp, this[i], i, this);
      }
    };
  • 相关阅读:
    递归练习:走台阶
    递归练习:计算最大公约数和最小公倍数
    递归练习:逆序输出一个十进制数的各位数字
    m4, autoconf
    Makefile 和 CMakeLists.txt
    Java中的String pool
    小米路由Mini刷Breed, 潘多拉和LEDE
    Centos 编译LEDE/OpenWrt
    Centos6下编译安装gcc6.4.0
    IntelliJ IDEA遇到Unable to parse template “Class”错误
  • 原文地址:https://www.cnblogs.com/kefeiGame/p/8392016.html
Copyright © 2020-2023  润新知