成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從 forEach 開始談談遍歷技巧

開發 架構
forEach 作為一個比較出眾的遍歷操作,之前有很多庫都對其進行過各種包裝,然而我還是發現很多人并不是非常理解 forEach。如果想了解,請看下面詳細內容。

 [[169550]]

forEach

今天從 forEach 開始談談遍歷吧。

forEach 作為一個比較出眾的遍歷操作,之前有很多庫都對其進行過各種包裝,然而我還是發現很多人并不是非常理解 forEach。

比如第二個參數 this 的使用。

往常都習慣這么做: 

  1. const self = this 
  2.  
  3. arr.forEach(function(item) { 
  4.  
  5. // do something with this 
  6.  
  7. }) 

 然而如果使用第二個參數就可以這樣: 

  1. arr.forEach(function(item) { 
  2.  
  3. // do something with this 
  4.  
  5. }, this) 

 省去了一個中間的self,看起來更優美了

那么有沒有更好的處理方式呢?

有的: 

  1. arr.forEach(item => { 
  2.  
  3. // do something 
  4.  
  5. }) 

 由于 arrow function 的特性,自動綁定父 scope 的 this, 會更加簡潔,而且少了個function關鍵字,可讀性更好。

for

說到循環必定要說到for循環了。js里面的for循環有好幾種使用方式:

C 系列 for 循環: 

  1. for (let index = 0; index < arr.length; index++) { 
  2.  
  3. // do something 
  4.  

 index 是 arr 的索引,在循環體中通過 arr[index] 調用當前的元素,我非常不喜歡這種方式,因為要寫兩個分號!

還有另一種比較簡單的方式: 

  1. for (let key in obj) { 
  2.  
  3. // do something 
  4.  

 不過這個方式一般用來遍歷對象,下文有說。

關于 for 循環還有 ES2015 規定的一種 

  1. for (let item of arr) { 
  2.  
  3. // do something 
  4.  

 這種遍歷方式和之前的***區別在于item,它是value而非key,可以直接迭代出內容。

不過這種方式我個人用的不多,因為很多情況下我更喜歡用array下的方法。對于對象的遍歷更傾向于for...in

map 系列

這一塊是js的函數式領域了。

Array.prototype下掛載著幾個非常好用的遍歷函數。比如map

它會遍歷arr下的所有內容,做操作之后返回數據,形成一個新的數組: 

  1. const arr = [1, 2, 3] 
  2.  
  3. arr.map(current => current * 5) 

 在 react 最常用。經常用來遍歷數據,形成dom: 

  1. someRender() { 
  2.  
  3. return this.state.data.map((currentindex) => { 
  4.  
  5. return <li key={index}>{ current }</li> 
  6.  
  7. }) 
  8.  

 不過 map 有一點不好的地方在于不能控制循環的流程,如果不能完成,就返回undefined繼續下一次迭代。所以遇到可能會返回undefined的情況應該用forEach或者for循環遍歷

還有filter用法和map一模一樣,只是它用來過濾數據。非常的好用。

arguments

說到遍歷不得不提及arguments, 在function()中的所有參數,奇怪的是它并不是一個數組。只是一個類數組。

一般需要轉成數組: 

  1. function foo() { 
  2.  
  3. const args = Array.prototype.slice.call(arguments) 
  4.  
  5. return Array.isArray(args) 
  6.  

 但是我個人并不認同這樣的方法,有了新的 ES2015 就不要用這么丑的語法了 

  1. function foo(...args) { 
  2.  
  3. // args 是數組 
  4.  

 ES2015 的 rest 語法使得剩余參數都傳入args里面,比之前的還要調Array的方法要輕松不少。

object

對象的遍歷是非常常用的功能。

我個人更喜歡用for...in語法,但是有一點需要注意: 

  1. for (let index in obj) { 
  2.  
  3. if(obj.hasOwnProperty(index)) { 
  4.  
  5. // do something 
  6.  
  7.  

 因為除非強制指定,否則對象都是不純凈的。都會有__proto__屬性,也會被迭代出來。需要過濾一下。

好了,如何創建純凈的對象? 

  1. const plainObj = Object.create(null

最輕的obj結構,內部沒有任何多余的屬性。

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2024-06-27 10:45:27

2021-03-29 12:01:00

遍歷數組for循環

2025-05-08 08:10:53

2009-11-17 15:57:26

PHP數組合并

2022-09-07 11:52:48

forforEach前端

2024-03-21 09:51:22

Python爬蟲瀏覽網站

2009-07-08 18:28:57

惠普刀片刀片服務器

2013-01-11 14:35:46

Windows 8開始屏幕

2019-03-04 09:22:52

阿里巴巴foreach Java

2021-08-17 10:11:52

DPU計算機數據中心

2018-02-07 16:23:58

連接池內存池AI

2018-02-27 12:41:21

Serverless邊緣計算存儲

2022-08-27 14:42:45

Java集合數組

2019-07-02 16:57:20

混合云技術Linux

2011-12-03 11:04:21

SSL VPN移動設備

2009-06-03 15:14:04

SOA應用耦合

2023-06-14 08:54:09

Map方法ForEach方法

2023-05-23 08:01:10

Netty網絡通信

2022-12-15 17:15:42

數據庫NoSQL

2011-04-12 13:43:17

布線
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美午夜精品久久久久免费视 | 国产探花在线精品一区二区 | 国产成人福利视频在线观看 | 国产精品久久久久久久久久久久 | 区一区二在线观看 | 一区二区三区精品视频 | 99视频久 | 亚洲二区视频 | www.888www看片 | 91看片官网 | 久久一二三区 | 日本不卡一区 | 亚洲在线| 天天拍天天操 | 亚洲成人国产综合 | 国产一区二区观看 | 亚洲免费在线视频 | 国产一区二区影院 | 视频一区在线 | 久热久热 | 最新中文字幕在线 | 91精品国产91久久久久久吃药 | 色吊丝2288sds中文字幕 | 在线播放国产一区二区三区 | 91久久网站 | 性做久久久久久免费观看欧美 | 成人二区 | 亚洲激情第一页 | 欧美一区二区三区国产 | 国产精品69毛片高清亚洲 | 在线观看中文字幕 | 五月天婷婷丁香 | 紧缚调教一区二区三区视频 | 日韩国产精品一区二区三区 | 久草在线在线精品观看 | 在线观看av网站 | 久久福利电影 | 成人在线免费电影 | 欧美色999 | 久久久久久久久久久久久9999 | 成人性视频免费网站 |