zoukankan      html  css  js  c++  java
  • 数组方法重写:forEach, map, filter, every, some, reduce

    <html>
      <head>
    
      </head>
      <body>
        <script type="text/javascript">
          Array.prototype.myForEach = function(fn) {
            var arr = this,
              len = arr.length,
              arg2 = arguments[1] || window;
            for(var i = 0; i < len; i++) {
              fn.apply(arg2, [arr[i], i, arr]);
            }
          };
    
          Array.prototype.myFilter = function(fn) {
            var arr = this,
              len = arr.length,
              arg2 = arguments[1] || window,
              newArr = [];
            for(var i =0; i < len; i++) {
              var item = deepClone(arr[i]);
              fn.apply(arg2, [item, i, arr])? newArr.push(item): ''
            }
    
            return newArr;
          }
    
          Array.prototype.myMap = function(fn) {
            var arr = this,
              len = arr.length,
              arg2 = arguments[1] || window,
              newArr = [];
            for(var i =0; i < len; i++) {
              var item = deepClone(arr[i]);
              newArr.push(fn.apply(arg2, [item, i, arr]));
            }
            return newArr;
          }
    
          Array.prototype.myReduce = function(fn, initialValue) {
           var arr = this,
            len = arr.length,
            arg2 = arguments[2] || window;
          for(var i = 0; i < len; i++) {
            initialValue = fn.apply(arg2, [initialValue, arr[i], i, arr]);
          }
          return initialValue;
         }
    
         Array.prototype.myEvery = function(fn) {
           var arr = this,
            len = arr.length,
            arg2 = arguments[1] || window,
            flag = true;
          for(var i = 0; i < len; i++) {
            if(!fn.apply(arg2, [arr[i], i, arr])) {
              flag = false;
              break;
            }
          }
          return flag;
         }
    
         Array.prototype.mySome = function(fn) {
           var arr = this,
            len = arr.length,
            arg2 = arguments[1] || window,
            flag = false;
          for(var i = 0; i < len; i++) {
            if(fn.apply(arg2, [arr[i], i, arr])) {
              flag = true;
              break;
            }
          }
          return flag;
         }
    
          function deepClone(source, target) {
            var target = target || {};
            for(var key in source) {
              if(typeof(source[key]) === 'object' && source[key] !== null) {
                if(Object.prototype.toString.call(source[key]) === '[object Object]') {
                  target[key] = {};
                } else if(Object.prototype.toString.call(source[key]) === '[object Array]') {
                  target[key] = [];
                }
                deepClone(source[key], target[key]);
              } else {
                target[key] = source[key]
              }
            }
            return target;
          }
    
          var arr = [{id: 1}, {id: 2}];
          arr.myForEach(function(item, index, myArr){
            item.id = item.id +1;
          });
    
          var arrFilter = arr.myFilter(function(item, index, myArr) {
            return item.id > 2;
          });
    
          var arrMap = arr.myFilter(function(item, index, myArr) {
            return item.id = item.id + 2;
          });
    
    
        var arr1 = [1, 3, 5, 6];
         console.log(arr1.myReduce(function(prev, elem){
           return prev = prev + elem;
         }, 0));
         console.log(arr1.myEvery(function(item){
           return item > 2;
         }));
         console.log(arr1.mySome(function(item){
           return item > 2;
         }));
    
          console.log(arr);
    
          var obj1 = {
            a: 1,
            b: {
              c: {
                d: 4
              }
            },
            e: null,
            f: undefined,
            g: false,
            h: [{id: 1}, 2, {child: {name: 'test'}}]
          };
          var obj2 = {};
          deepClone(obj1, obj2);
          console.log(obj2);
        </script>
      </body>
    </html>
  • 相关阅读:
    图书管理系统---基于form组件和modelform改造添加和编辑
    Keepalived和Heartbeat
    SCAN IP 解释
    Configure Active DataGuard and DG BROKER
    Oracle 11gR2
    我在管理工作中積累的九種最重要的領導力 (李開復)
    公募基金公司超融合基础架构与同城灾备建设实践
    Oracle 11g RAC for LINUX rhel 6.X silent install(静默安装)
    11gR2 静默安装RAC 集群和数据库软件
    Setting Up Oracle GoldenGate 12
  • 原文地址:https://www.cnblogs.com/ycherry/p/12106123.html
Copyright © 2011-2022 走看看