幾種遍歷方式的比較

2022-04-23 09:44:00 字數 2943 閱讀 2693

主要從幾個方面討論

1.是否有返回值

2.是否在遍歷過程中拿到value、key或者value、index

3.適用資料型別

4.遍歷物件是否包含symbol屬性或者不可列舉屬性

一、for 、while、do while幾種迴圈(靈活而冗雜)

是否有返回值:非函式,不討論              

value、index

陣列就拿for來舉例

let arr =[1,2,3,4]

for (let i =0;i二、foreach(只是運算元組而不需它給任何值)

沒有返回值

value、index

陣列、set

let arr =['l','o','v','e']

let res=arr.foreach((value,index)=>)

console.log('返回值',res)

三、map(運算元組,同時拿到操作後的值)

有返回值

value、index

陣列

let arr =['l','o','v','e']

let res=arr.map((value,index)=>)

console.log('返回值',res)

明顯可以看到返回值那裡的區別,如果想拿到對應的value和index,需要手動return

let arr =['l','o','v','e']

let res=arr.map((value,index)=>)

console.log('返回值',res)

四、for...in(只想拿到陣列的索引或者物件本身及父物件可列舉的屬性名,不含symbol屬性)非函式key或者index

物件和陣列

五、object.keys()(拿到物件的所有可列舉屬性名或者陣列索引並且放到乙個陣列中)

乙個陣列

keys或者indexs

物件和陣列

let obj = 

let res=object.keys(obj)

console.log('結果',res)

let arr =['l','o','v','e']

let res=object.keys(arr)

console.log('結果',res)

六、for...of(所有有iterator介面的陣列、物件、偽陣列都可以拿到value,切記object物件不可以)非函式value

array,map,set,string,typedarray,函式的 arguments 物件,nodelist 物件(其中字串會可以識別unicode字元)

七、object.getownpropertynames(obj)(物件自身的所有屬性(不含symbol屬性,但是包括不可列舉屬性))

乙個陣列

keys或者indexs(如果是陣列,還會有個'length',因為它是不可列舉屬性)

物件和陣列

let obj = 

let res =object.getownpropertynames(obj)

console.log(res)

let arr =['l','o','v','e']

let res =object.getownpropertynames(arr)

console.log(res)

八、reflect.ownkeys(obj)(物件自身的所有屬性,包括不可列舉和symbol)乙個陣列

keys或者indexs(因為包含不可列舉屬性,所有也會有'length')

物件和陣列

let obj = 

let res =reflect.ownkeys(obj)

console.log(res)

let arr =['l','o','v','e']

let res =reflect.ownkeys(arr)

console.log(res)

因為這裡並沒有給obj設定symbol屬性,所有從列印結果來看和object.getownpropertynames(obj)是一樣的. 

總結:根據不同的遍歷需求選擇不同的方案,是否需要返回值,具體是要鍵還是值,這個函式適合陣列還是物件,以及有沒有特殊性質的屬性等等.日常開發中很多只要考慮前三條就好了,適當選擇會一定程度上減少自己的**量. 

std vector的幾種遍歷方式比較

std vector是我在標準庫中實用最頻繁的容器。總結一下在遍歷和建立vector時需要注意的一些地方。在不考慮執行緒安全問題的前提下,在c 11中有五種遍歷方式。方式一 for size t i 0 i vec.size i 方式二 size t len vec.size for size t ...

SQL Server中幾種遍歷方式比較

sql遍歷解析 在sql的儲存過程,函式中,經常需要使用遍歷 遍歷table 其中游標 臨時表等遍歷方法很常用。面對小資料量,這幾種遍歷方法均可行,但是面臨大資料量時,就需要擇優選擇,不同的遍歷方法,在效率上存在指數級別的差異 本文主要針對大量資料的遍歷,當資料量小時 可以隨意選擇一種遍歷方法。例項...

遍歷的幾種方式

es5的話也可以使用foreach,es5具有遍歷陣列功能的還有map filter some every reduce reduceright等,只不過他們的返回結果不一樣。但是使用 foreach 遍歷陣列的話,使用 break 不能中斷迴圈,使用 return 也不能返回到外層函式。使用for...