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

  • 相关阅读:
    Corn Fields 状压动归入门题
    codevs 2800 送外卖 floyd + Tsp
    互不侵犯 状压动归入门题
    跨终端电商平台的实现之手势效果(左右滑动)
    nodejs和树莓派开发以及点亮RGB的LED灯代码
    基于vue-cli搭了一个多页面应用的空脚手架
    About HTML
    【译】遗留浏览器中的表单
    Vue2的右键弹出菜单(vue-contextmenu)
    IMWEB 前端面试题汇总
  • 原文地址:https://www.cnblogs.com/shentao11023/p/10974980.html
Copyright © 2011-2022 走看看