JavaScript手写数组的常用函数总结
前言
在开发过程中,我们常常使用数组的一些api相关操作,其中包含forEach、filter、find、findIndex、map、some、every、reduce、reduceRight等函数方法。
今天,我们试试手写这些函数,实现数组这些函数方法。为了方便,直接在数组原型对象prototype上扩展。
本文Githab已上传,更多往期文章已分类整理。
正文
参数说明
callbackFn回调函数
thisArg执行callbackFn时使用的this值
currentValue数组中正在处理的元素
index当前索引
array源数组
accumulator累加器
initialValuereducereduceRight第一次调用callbackFn函数时的第一个参数的值默认值
element自己实现的this对象
forEach函数
语法:arr.forEach(callbackFn(currentValue[,index[,array]])[,thisArg])
方法功能:对数组的每个元素执行一次给定的函数。
返回:undefined。
自定义函数:myForEach。
Array.prototype.myForEach=function(callbackFn,thisArg){ if(typeofcallbackFn!=='function')throw('callbackFn参数必须是函数'); letelement=this, len=element&&element.length||0; if(!thisArg)thisArg=element; for(letindex=0;indexfilter函数
语法:varnewArray=arr.filter(callbackFn(currentValue[,index[,array]])[,thisArg])
方法功能:创建一个新数组,其包含通过所提供函数实现的测试的所有元素。
返回:一个新的、由通过测试的元素组成的数组,如果没有任何数组元素通过测试,则返回空数组。
自定义函数:myFilter。
Array.prototype.myFilter=function(callbackFn,thisArg){ if(typeofcallbackFn!=='function')throw('callbackFn参数必须是函数'); letelement=this, len=element&&element.length||0, result=[]; if(!thisArg)thisArg=element; for(letindex=0;indexfind函数
语法:arr.find(callbackFn[,thisArg])
方法功能:返回数组中满足提供的测试函数的第一个元素的值。否则返回undefined。
返回:数组中第一个满足所提供测试函数的元素的值,否则返回undefined。
自定义函数:myFind。
Array.prototype.myFind=function(callbackFn,thisArg){ if(typeofcallbackFn!=='function')throw('callbackFn参数必须是函数'); letelement=this, len=element&&element.length||0; if(!thisArg)thisArg=element; for(letindex=0;indexfindIndex函数
语法:arr.findIndex(callbackFn[,thisArg])
方法功能:返回数组中满足提供的测试函数的第一个元素的值。否则返回undefined。
返回:数组中通过提供测试函数的第一个元素的索引。否则,返回-1。
自定义函数:myFindIndex。
Array.prototype.myFindIndex=function(callbackFn,thisArg){ if(typeofcallbackFn!=='function')throw('callbackFn参数必须是函数'); letelement=this, len=element&&element.length||0; if(!thisArg)thisArg=element; for(letindex=0;indexfill函数
语法:arr.fill(value[,start[,end]])
方法功能:用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引。
返回:返回替换的值,原数组发生改变。
自定义函数:myFill。
Array.prototype.myFill=function(value,start=0,end){ letelement=this, len=element&&element.length||0; end=end||len; letloopStart=start<0?0:start,//设置循环开始值 loopEnd=end>=len?len:end;//设置循环结束值 for(;loopStartmap函数
语法:varnew_array=arr.map(functioncallbackFn(currentValue[,index[,array]]){//Returnelementfornew_array}[,thisArg])
方法功能:创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。
返回:测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回的是一个Boolean类型的值。一个由原数组每个元素执行回调函数的结果组成的新数组。
自定义函数:myMap。
Array.prototype.myMap=function(callbackFn,thisArg){ if(typeofcallbackFn!=='function')throw('callbackFn参数必须是函数'); letelement=this, len=element&&element.length||0, result=[]; if(!thisArg)thisArg=element; for(letindex=0;indexsome函数
语法:arr.some(callbackFn(currentValue[,index[,array]])[,thisArg])
方法功能:测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回的是一个Boolean类型的值。
返回:数组中有至少一个元素通过回调函数的测试就会返回true;所有元素都没有通过回调函数的测试返回值才会为false。
自定义函数:mySome。
Array.prototype.mySome=function(callbackFn,thisArg){ if(typeofcallbackFn!=='function')throw('callbackFn参数必须是函数'); letelement=this, len=element&&element.length||0; if(!thisArg)thisArg=element; for(letindex=0;indexevery函数
语法:arr.every(callbackFn(currentValue[,index[,array]])[,thisArg])
方法功能:测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值。
返回:如果回调函数的每一次返回都为true值,返回true,否则返回false。
自定义函数:myEvery。
Array.prototype.myEvery=function(callbackFn,thisArg){ if(typeofcallbackFn!=='function')throw('callbackFn参数必须是函数'); letelement=this, len=element&&element.length||0; if(!thisArg)thisArg=element; for(letindex=0;indexreduce函数
语法:arr.reduce(callback(accumulator,currentValue[,index[,array]])[,initialValue])
方法功能:对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
返回:函数累计处理的结果。
自定义函数:myReduce。
Array.prototype.myReduce=function(callbackFn,initialValue){ if(typeofcallbackFn!=='function')throw('callbackFn参数必须是函数'); letelement=this, len=element.length||0, index=0, result; if(arguments.length>=2){ result=arguments[1]; }else{ while(index=len)thrownewTypeError('Reduceofemptyarray'+'withnoinitialvalue'); result=element[index++]; } while(index reduceRight函数
语法:arr.reduceRight(callback(accumulator,currentValue[,index[,array]])[,initialValue])
方法功能:接受一个函数作为累加器(accumulator)和数组的每个值(从右到左)将其减少为单个值。
返回:执行之后的返回值。
自定义函数:myReduceRight。
Array.prototype.myReduceRight=function(callbackFn,initialValue){ if(typeofcallbackFn!=='function')throw('callbackFn参数必须是函数'); letelement=this, len=element.length||0, index=len-1, result; if(arguments.length>=2){ result=arguments[1]; }else{ while(index>=0&&!(indexinelement)){ index--; } if(index<0){ thrownewTypeError('reduceRightofemptyarraywithnoinitialvalue'); } result=element[index--]; } for(;index>=0;index--){ if(indexinelement){ result=callbackFn(result,element[index],index,element); } } returnresult; }最后
到此这篇关于JavaScript手写数组常用函数总结的文章就介绍到这了,更多相关JS手写数组常用函数内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!