当前位置: 首页 > 科技观察

说说forEach的遍历技巧

时间:2023-03-20 22:46:55 科技观察

forEach今天说说forEach的遍历。forEach是一个比较优秀的遍历操作。很多图书馆之前都用各种方式打包过。但是,我还是发现很多人对forEach不是很了解。比如使用第二个参数this。我习惯这样做:constself=thisarr.forEach(function(item){//dosomethingwiththis})但是,如果你使用第二个参数,你可以这样做:arr.forEach(function(item){//dosomethingwiththis},this)去一个中间的自己,看起来更漂亮,那么有没有更好的处理方法呢?是的:arr.forEach(item=>{//dosomething})由于箭头函数this的特性,会自动绑定父scope,会更简洁,少了一个function关键字,可读性更强.说到循环,就必须要说到for循环。js中for循环的使用有几种方式:C系列for循环:for(letindex=0;indexcurrent*5)是最常用的在反应。常用于遍历数据形成dom:someRender(){returnthis.state.data.map((current,index)=>{return{current}})}但是map有一个不好的地方就是不能控制循环的流程。如果无法完成,则返回undefined继续下一次迭代。所以,如果遇到可能返回undefined的情况,应该使用forEach或者for循环遍历,filter的用法和map完全一样,只不过是用来过滤数据。非常容易使用。arguments说到遍历就不得不提arguments,function()中的所有参数,奇怪的是它不是数组。只是一个类似数组的。一般需要转成数组:functionfoo(){constargs=Array.prototype.slice.call(arguments)returnArray.isArray(args)}但是我个人不太认同这种方式。有了新的ES2015,就不要用这么难看的了。语法是functionfoo(...args){//argsisanarray}ES2015的rest语法允许将剩余的参数传入args,这比之前调整Array的方法简单多了。对象对象遍历是一个很常用的函数。我个人更喜欢使用for...in语法,但有一点需要注意:for(letindexinobj){if(obj.hasOwnProperty(index)){//dosomething}}因为对象是不纯的,除非它们是强制性的。会有一个__proto__属性,它也会被迭代。它需要被过滤。那么,如何创建一个纯对象呢?constplainObj=Object.create(null)是最轻的obj结构,里面没有任何额外的属性。