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新增的数组方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!