You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
varObjPro=Object.prototype,hasOwn=ObjPro.hasOwnProperty,nativeSome=ObjPro.some,nativeEvery=ObjPro.every;// some Array.prototype.some=nativeSome||function(callBack,ctx){if(typeofcallBack!='function')return;varresultValue=false;for(vari=0,len=this.length;i<len;i++){if(resultValue){break;}resultValue=!!callBack.call(ctx,this[i],i,this);}returnresultValue;}// everyArray.prototype.every=nativeEvery||function(callBack,ctx){if(typeofcallBack!='function')return;varresultValue=true;for(vari=0,len=this.length;i<len;i++){if(!resultValue){break;}resultValue=!!callBack.call(ctx,this[i],i,this);}returnresultValue;}
前言
新增方法预览
forEach
如果用forEach我们应该如何做呢?
是不是觉得不用写for循环了,瞬间逼格都高了
看看对比
接着我们来看一下forEach的第二个参数,这个参数决定第一个回调函数的内部this指向
最后接下来我们自己实现一下这个方法
map
map
callback
举个栗子
注意上面的return,如果我们不写return会怎样呢?
这一堆的undefined是啥情况,还记得一个函数执行完,如果没有显示的返回值,会返回什么吗? 没错 就是
undefined
,这就是原因所在,等会通过源码,你就会更加明白。最后我们自己实现一下map这个方法
filter
但是和map也有差别的地方,filter需要你在callback处返回弱等于
true
的值,才会将原数组中筛选出的值返回给你。举个栗子
当然最后还有第二个参数改变内部this指向的参数可选,默认是window对象,你也可以传一个对象进去, 最后我们自己来实现一下这个api
some vs every
举个栗子
some 和 every使用起来非常简单,接下来我们自己实现一把
indexOf
举个例子
实现代码
lastIndexOf
举个栗子
源码实现
reduce
array.reduce(callback[, initialValue])
,接收一个回调函数,一个初始化的值initialValue
。其中callback参数分别是初始化的值initialValue
,如果没有传入initialValue
,则默认是数组的第一项。第二个及其后面的参数分别是当前值
,索引
,数组本身
我们来看一下上面的执行过程是怎样的。
第一回合
第二回合
第三回合
第四回合
第五回合
最后得到结果
15
那么我们如何自己实现一个reduce呢?
reduceRight
结尾
最后把代码放到github上面了
github地址
各位大大,请让我打个小广告。😄😄😄
博客地址
The text was updated successfully, but these errors were encountered: