• 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还是很重要的,我们不单单是要学会怎么用,还要搞清楚内部是如何实现,之前我对数组的这些方法也不是很清楚,只用到了其中的一部分,现在通过总结可以加深对他们的理解。

  • 相关阅读:
    解决远程连接mysql很慢的方法(网络正常)
    分布式系统中可用性及容错性的区别
    设计模式个人思考
    记第一次多用户在Git提交代码
    Git远程分支的回退
    Linux模拟控制网络时延
    ubuntu 软件
    编译cubieboard android 源码过程详解之(六):pack
    编译cubieboard android 源码过程详解之(五):make
    编译cubieboard android 源码过程详解之(四):extract-bsp
  • 原文地址:https://www.cnblogs.com/shentao11023/p/10974980.html
Copyright © 2020-2023  润新知