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

  • 相关阅读:
    Tomcat的安装配置与JavaWeb入门教程
    傅立叶变换系列(一)傅立叶系列的由来
    剑指Offer(四):重建二叉树
    《C++数据结构-快速拾遗》 手写链表
    《C++数据结构-快速拾遗》 基础常识
    《机器学习实战》线性回归
    剑指Offer(三):从尾到头打印链表
    博客美化操作
    偏差、方差和噪声的权衡关系
    《机器学习实战》AdaBoost算法(手稿+代码)
  • 原文地址:https://www.cnblogs.com/shentao11023/p/10974980.html
Copyright © 2011-2022 走看看