自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從 forEach 開始談?wù)劚闅v技巧

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

 [[169550]]

forEach

今天從 forEach 開始談?wù)劚闅v吧。

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

比如第二個參數(shù) this 的使用。

往常都習(xí)慣這么做: 

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

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

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

 省去了一個中間的self,看起來更優(yōu)美了

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

有的: 

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

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

for

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

C 系列 for 循環(huán): 

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

 index 是 arr 的索引,在循環(huán)體中通過 arr[index] 調(diào)用當(dāng)前的元素,我非常不喜歡這種方式,因?yàn)橐獙憙蓚€分號!

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

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

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

關(guān)于 for 循環(huán)還有 ES2015 規(guī)定的一種 

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

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

不過這種方式我個人用的不多,因?yàn)楹芏嗲闆r下我更喜歡用array下的方法。對于對象的遍歷更傾向于for...in

map 系列

這一塊是js的函數(shù)式領(lǐng)域了。

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

它會遍歷arr下的所有內(nèi)容,做操作之后返回數(shù)據(jù),形成一個新的數(shù)組: 

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

 在 react 最常用。經(jīng)常用來遍歷數(shù)據(jù),形成dom: 

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

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

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

arguments

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

一般需要轉(zhuǎn)成數(shù)組: 

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

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

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

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

object

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

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

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

 因?yàn)槌菑?qiáng)制指定,否則對象都是不純凈的。都會有__proto__屬性,也會被迭代出來。需要過濾一下。

好了,如何創(chuàng)建純凈的對象? 

  1. const plainObj = Object.create(null

最輕的obj結(jié)構(gòu),內(nèi)部沒有任何多余的屬性。

責(zé)任編輯:龐桂玉 來源: segmentfault
相關(guān)推薦

2024-06-27 10:45:27

2021-03-29 12:01:00

遍歷數(shù)組for循環(huán)

2022-09-07 11:52:48

forforEach前端

2009-11-17 15:57:26

PHP數(shù)組合并

2024-03-21 09:51:22

Python爬蟲瀏覽網(wǎng)站

2019-03-04 09:22:52

阿里巴巴foreach Java

2009-07-08 18:28:57

惠普刀片刀片服務(wù)器

2013-01-11 14:35:46

Windows 8開始屏幕

2023-06-14 08:54:09

Map方法ForEach方法

2021-08-17 10:11:52

DPU計算機(jī)數(shù)據(jù)中心

2018-02-07 16:23:58

連接池內(nèi)存池AI

2018-02-27 12:41:21

Serverless邊緣計算存儲

2022-08-27 14:42:45

Java集合數(shù)組

2011-12-03 11:04:21

SSL VPN移動設(shè)備

2019-07-02 16:57:20

混合云技術(shù)Linux

2009-06-03 15:14:04

SOA應(yīng)用耦合

2023-05-23 08:01:10

Netty網(wǎng)絡(luò)通信

2022-12-15 17:15:42

數(shù)據(jù)庫NoSQL

2024-01-05 15:06:04

元素程序員review

2012-10-29 18:01:14

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號