数组方法重写:forEach, map, filter

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;
      }

      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;
      });

原文地址:https://www.cnblogs.com/ycherry/p/12106123.html

时间: 2024-11-06 17:23:37

数组方法重写:forEach, map, filter的相关文章

js数组遍历some,foreach,map,filter,every对比

1. [...].some(ck)函数       ----      某个一个为true,则为true 对数组中每个元素执行一次ck函数,知道某个元素返回true,则直接返回true.如果都返回false,则返回false 检查整个数组中是否有满足ck函数的元素. var result = [1,5,3,6].some(  (v,i)  =>  (v>10) )      //所有元素都不满足,返回result = false var result = [10,5,30,60].some(

数组那些事(slice,splice,forEach,map,filter等等)

周五,再过会要下班了,刚才把<javascript高级程序设计>数组这块又看了下,加深下记忆.今天来继续练练笔,嘿嘿!(写下自己印象不深的东西) 一.数组的定义(数组定义分为两种) 方法一:1 var color=new Array(num);//num为数字,(当然可写,可不写) 表示数组长度 var color=new Array("red","yellow");//直接定义数组内容 方法二: 2.var color=[];//当然也可以定义的时候直

forEach, map, filter方法区别

听说for循环已经成了菜鸟标配...? 瑟瑟发抖 赶紧找来资料补一补 1, forEach循环,循环数组中每一个元素并采取操作, 没有返回值, 可以不用知道数组长度 2, map函数,遍历数组每个元素,并回调操作,需要返回值,返回值组成新的数组,原数组不变 3,filter函数, 过滤通过条件的元素组成一个新数组, 原数组不变 4, some函数,遍历数组中是否有符合条件的元素,返回Boolean值 5,every函数, 遍历数组中是否每个元素都符合条件, 返回Boolean值 原文引用:htt

处理数组的forEach map filter的兼容性

处理数组的forEach 1 //forEach处理 2 if(!Array.prototype.forEach) { 3 Array.prototype.forEach = function (callback) { 4 for(var i=0,len=this.length;i<len;i++) { 5 callback(this[i], i); 6 } 7 } 8 } 处理数组的map 1 //处理map 2 if(!Array.prototype.map) { 3 Array.proto

ES5中Array新增加的API接口 forEach map filter some every indexOf lastIndexOf reduce reduceRight

var array = [23,48,66,2]; forEach:循环.遍历数组:没有返回值.与for循环类似 array.forEach(function( value, index, array ) { console.log(value); return value * value; } ); map:映射的意思,映射返回一个新数组,有返回值;filterArr:返回一个新对象 var mapArr = array.map(function(value, index, array ){

JS中some(),every(),forEach(),map(),filter()区别

map():返回一个新的Array,每个元素为调用func的结果 filter():返回一个符合func条件的元素数组 some():返回一个boolean,判断是否有元素是否符合func条件 every():返回一个boolean,判断每个元素是否符合func条件 forEach():没有返回值,只是针对每个元素调用func API的区别 function my_func(item) { if (item == 1) { console.log('t'); return true; } con

PowerShell数组方法之Foreach()与Where()

1 <# 2 1.PowerShell Array.Foreach(...)的签名是: 3 Array Foreach(expression[, arguments...]) 4 第一个参数通常是ScriptBlock类型或者类型符号(表示类型转换) 5 第二个以后的参数可以有很多个,都将作为$args自动变量的元素,传递给第一个参数 6 7 2.PowerShell Array.Where(...)的签名是: 8 Array Where({expression}[, mode[, number

ES5 对数组方法的扩展 以及 正则表达式

ES5 对数组的扩展 forEach map some every indexOf lastIndexOf forEach 与 map 语法: 数组.forEach(function ( v, i ) { }) 数组.map(function ( v, i ) {}) 1.   forEach 就是在模拟 jq 中 each 例:var arr = [ 11, 22, 33 ];        var res = arr.forEach(function ( v, i ) {          

数组方法汇总

1,javascript提供的原型方法有:join(),push(),pop(),shift(),unshift(),concat(),slice(),splice(),sort(),reverse() 1)join(separator):将数组以分隔符连接起来,返回连接后的字符串,默认以','分隔. var arr = [1,2,3]; arr.join(); //1,2,3 arr.join('-') //1-2-3 2)push()&pop() push():接收任意数量参数,并添加至数组