zoukankan      html  css  js  c++  java
  • ES5数组一些常用的方法源码实现

                //forEach源码实现
                Array.prototype.customeForEach = function (func, thisValue) {
                    var arr = this;
                    for (var i = 0; i < arr.length; i++) {
                        func.call(thisValue, arr[i], i, arr);
                    }
                }
                //some源码实现
                Array.prototype.customeSome = function (func, thisValue) {
                    var arr = this;
                    var state = false;
                    for (var i = 0; i < arr.length; i++) {
                        var val = func.call(thisValue, arr[i], i, arr);
                        if (val) {
                            state = true;
                            break;
                        }
                    }
                    return state;
                }
                //reduce源码实现
                Array.prototype.customeReduce = function (func, thisValue) {
                    var arr = this;
                    var total = thisValue ? thisValue : arr[0];
                    for (var i = thisValue ? 0 : 1; i < arr.length; i++) {
                        total = func(total, arr[i], i);
                    }
                    return total;
                }
                //filter源码实现
                Array.prototype.customeFilter = function (func, thisValue) {
                    var arr = this;
                    var result=[];
                    for (var i = 0; i < arr.length; i++) {
                        var val = func.call(thisValue, arr[i], i, arr);
                        if(val){
                             result.push(arr[i])
                        }
                    }
                    return result;
                }
                //map源码实现
                Array.prototype.customeMap=function(func, thisValue){
                    var arr = this;
                    var result=[];
                    for (var i = 0; i < arr.length; i++) {
                        var val = func.call(thisValue, arr[i], i, arr);
                        result.push(val);
                    }
                    return result;
                }
                //every源码实现
                Array.prototype.customeEvery=function(func,thisValue){
                    var arr = this;
                    var state = true;
                    for (var i = 0; i < arr.length; i++) {
                        var val = func.call(thisValue, arr[i], i, arr);
                        if (!val) {
                            state = false;
                            break;
                        }
                    }
                    return state;
                }

    源码的学习对于提升js还是很重要的,我们不单单是要学会怎么用,还要搞清楚内部是如何实现,之前我对数组的这些方法也不是很清楚,只用到了其中的一部分,现在通过总结可以加深对他们的理解。

  • 相关阅读:
    XML和解析
    代理模式
    net-snmp配置文件snmp.conf
    tomcat-在eclispe中配置远程调试
    tomcat-在eclipse中配置tomcat容器的内存
    web项目跨域访问
    STS-创建spring配置文件
    STS-新建mvc工程--helloworld
    STS-新建spring mvc项目
    Eclipse-安装Spring Tool Suit 插件
  • 原文地址:https://www.cnblogs.com/shentao11023/p/10974980.html
Copyright © 2011-2022 走看看