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>
  • 相关阅读:
    样式表中!important的用法
    ORA27101: shared memory realm does not exist问题的解决
    重置标识列的当前值
    ASP.NET Oracle数据库使用事务时注意事项
    Oracle中约束的添加方法总结
    HTML段落自动换行的样式设置
    ASP.NET应用程序中的服务器错误
    oracle中的rownum、order by与分页
    position:relative与float的区别
    Moss/Sharepoint 备份或还原时出错的处理(持续更新)
  • 原文地址:https://www.cnblogs.com/ycherry/p/12106123.html
Copyright © 2011-2022 走看看