主要從幾個方面討論
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']明顯可以看到返回值那裡的區別,如果想拿到對應的value和index,需要手動returnlet res=arr.map((value,index)=>)
console.log('返回值',res)
let arr =['l','o','v','e']四、for...in(只想拿到陣列的索引或者物件本身及父物件可列舉的屬性名,不含symbol屬性)非函式key或者indexlet res=arr.map((value,index)=>)
console.log('返回值',res)
物件和陣列
五、object.keys()(拿到物件的所有可列舉屬性名或者陣列索引並且放到乙個陣列中)
乙個陣列
keys或者indexs
物件和陣列
let obj =let res=object.keys(obj)
console.log('結果',res)
let arr =['l','o','v','e']六、for...of(所有有iterator介面的陣列、物件、偽陣列都可以拿到value,切記object物件不可以)非函式valuelet res=object.keys(arr)
console.log('結果',res)
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']八、reflect.ownkeys(obj)(物件自身的所有屬性,包括不可列舉和symbol)乙個陣列let res =object.getownpropertynames(arr)
console.log(res)
keys或者indexs(因為包含不可列舉屬性,所有也會有'length')
物件和陣列
let obj =let res =reflect.ownkeys(obj)
console.log(res)
let arr =['l','o','v','e']因為這裡並沒有給obj設定symbol屬性,所有從列印結果來看和object.getownpropertynames(obj)是一樣的.let res =reflect.ownkeys(arr)
console.log(res)
總結:根據不同的遍歷需求選擇不同的方案,是否需要返回值,具體是要鍵還是值,這個函式適合陣列還是物件,以及有沒有特殊性質的屬性等等.日常開發中很多只要考慮前三條就好了,適當選擇會一定程度上減少自己的**量.
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...