JS模拟实现ECMAScript5新增的数组方法
ECMAScript5新增了十个数组方法,这些方法只有在ie9及以上浏览器中可以被使用,下面是对于这些方法的模拟实现。
一、Array.isArray(element)
该方法用于判断传入的对象是否为数组类型,返回true和false。
Array.newIsArray=function(element){ returnObject.prototype.toString.call(element).slice(8,-1).toLocaleLowerCase()==='array'; }
二、.indexOf(element)
该方法用于查找传入对象在数组中的位置,并返回该位置,若没有找到则返回-1,该方法不能用于寻找undefined。
indexOf方法可以和~符配合使用。按位运算符~会将传入数字取反并减一,所以-1就会变成0,这时候把它放在判断条件中会被隐式转换为false。
Array.prototype.newIndexOf=function(element){ varindex=-1; for(vari=0;i三、lastIndexOf(element)
该方法与indexOf(element)作用和返回值相同,唯一不同的地方是它是从右向左寻找。
Array.prototype.newLastIndexOf=function(element){ varindex=-1; for(vari=this.length-1;i>=0;i--){ if(this[i]===element&&this[i]!==undefined){ index=i; break; } } returnindex; }; vara=[1,2,3,4,5,2,,,3]; console.log(a.newLastIndexOf(undefined));四、forEach(function(element,index,array){})
遍历数组,参数为一个回调函数,有三个传参:当前元素、当前元素索引、整个数组,该方法会跳过保留缺失成员,不会破坏原数组。
Array.prototype.newForEach=function(fn){ for(vari=0;i五、every(function(element,index,array){})
使用传入的回调函数遍历数组,当所有回调都返回true时,every方法返回true,否则返回false。该方法会跳过保留缺失成员,不会破坏原数组。
Array.prototype.newEvery=function(fn){ varstatus=true; for(vari=0;i六、some(function(element,index,array){})
使用传入的回调函数遍历数组,当有回调返回true时,some方法返回true,否则返回false。该方法会跳过保留缺失成员,不会破坏原数组。
Array.prototype.newSome=function(fn){ varstatus=false; for(vari=0;i七、map(function(element,index,array){})
使用传入的回调函数遍历数组,使用遍历数组返回的内容组成一个新的数组,该方法会跳过空元素,但是最终结果保留缺失成员的位置,不会破坏原数组。
Array.prototype.newMap=function(fn){ vararray=newArray(this.length); for(vari=0;i八、filter(function(element,index,array){})
使用传入的回调函数遍历数组,最终返回一个新数组,该数组中包含所有回调函数返回true的元素,不会破坏原数组。
Array.prototype.newFilter=function(fn){ vararray=[]; for(vari=0;i九、reduce(function(accumulator,currentValue,currentIndex,array){})
使用传入的回调函数遍历数组,返回最后一个回调函数调用的返回值,跳过缺失成员,不会破坏原数组。
Array.prototype.newReduce=function(fn){ if(this.length===0){ thrownewTypeError('Reduceofemptyarraywithnoinitialvalue'); } varresult; for(vari=0;i十、reduceRight(function(accumulator,currentValue,currentIndex,array){})
该方法作用于reduce相同,唯一区别是它是从右往左开始遍历。
Array.prototype.newReduceRight=function(fn){ if(this.length===0){ thrownewTypeError('Reduceofemptyarraywithnoinitialvalue'); } varresult; for(vari=this.length-1;i>=0;i--){ if(iinthis){ if(!result){ result=this[i]; }else{ result=fn(result,this[i],i,this); } } } returnresult; }; vara=[,,1,2,3,4,,6,7]; console.log(a.newReduceRight(function(a,b){ console.log(arguments); returna+b; }))以上所述是小编给大家介绍的JS模拟实现ECMAScript5新增的数组方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!