JS中的一些遍歷方法

2022-06-13 16:48:12 字數 3194 閱讀 3055

以下遍歷方法中for迴圈效能最好,而且優化版for迴圈效能最高。只有foreach不能跳出迴圈。

在迴圈陣列時,如果在迴圈過程中對陣列進行了增刪改,那麼在後面的每次迴圈中,進行操作的都是已經修改過後的陣列。

let arr = ['a','b','c','d'];  

for (let i = 0; i < arr.length; i++)

}console.log(arr);

//此時輸出 ["b", "d"] 而不是 ["c", "d"],即實際上刪除了 a、c

該迴圈可以使用 break、continue 來跳出迴圈,若該迴圈放在函式體內則可以使用 return ,return 只能在函式體內使用。

var arr = [1,2,3]

for(var i=0; i)

//優化版for迴圈,對於較大的陣列優化比較明顯

for(var i=0,len = arr.length; i)

注意,以上迴圈是先判斷再執行,第一次執行也需判斷

foreach迴圈每個元素是值。

該迴圈無法中途跳出迴圈,break、continue、return都無法使用。

var arr = [1,2,3]

arr.foreach(

function

(value, index, arr))

//value:必需,當前陣列元素的值

//index:可選,當前元素的索引

//arr:可選,當前元素所屬的陣列物件

for...in迴圈每個元素是索引,該迴圈效率比較低。for...in 迴圈不太適用於遍歷陣列,主要是為遍歷物件而設計的。

該迴圈可以使用 break、continue 來跳出迴圈,若該迴圈放在函式體內則也可以使用 return 。

//

用於陣列

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

for (var i in

arr)

//用於物件

var obj =

for (var j in

obj)

for...of迴圈每個元素是值。該迴圈不支援物件。

該迴圈可以使用 break、continue 來跳出迴圈,若該迴圈放在函式體內則也可以使用 return。

var arr = [1,2,3]

for (var

value of arr)

for (var

value of arr)         

//輸出:1 2

map 迴圈可以遍歷陣列

map的**函式中支援 return返回值,return 後面的值將返回作為新陣列的元素,原陣列不會改變。

array.map(function(val,index,arr){})

let arr = ['a','b','c'];

arr.map(

function

(val,index,arr))

let arr2 = arr.map(function

(val,index,arr))

console.log(arr2)

//["new a", "new b", "new c"]

物件的每個屬性都有乙個描述物件(descriptor),用來控制該屬性的行為。object.getownpropertydescriptor方法可以獲取該屬性的描述物件。

let obj = ;

object.getownpropertydescriptor(obj, 'foo')

//

描述物件的enumerable屬性,稱為「可列舉性」,如果該屬性為false,某些操作比如一些遍歷操作會忽略當前屬性。

目前,有四個操作會忽略enumerable為false的屬性。

該遍歷方法輸出的是物件自身的屬性以及原型鏈上可列舉的屬性。不含symbol屬性。(包含所有可列舉的)(不含 symbol 的)

var obj =;

object.prototype.country = 'china'; //

在原型鏈上新增屬性,預設的可列舉性是 true

console.log(obj);

for (var index in

obj)

object.keys返回乙個陣列,該陣列由物件自身的所有可列舉屬性的鍵名組成。(只包含自身可列舉的)(不含 symbol 的,不含繼承的)

var obj =;

object.keys(obj).foreach(

function

(item))

object.getownpropertynames返回乙個陣列,該物件由物件自身所有的屬性的鍵名組成。(包括自身所有的)(不含 symbol  的,不含繼承的)

reflect.ownkeys返回乙個陣列,包含物件自身的所有鍵名,不管鍵名是 symbol 或字串,也不管是否可列舉。(包含所有的除了繼承)

for(var i=1;i<=10;i++)  

console.log(i) //1234567

}

但是要注意,break語句跳出的是自己所在的那一層 for 迴圈語法,如果有多個 for 迴圈巢狀,break 總是跳出自己所在的那一層 for 迴圈。

for (let i=1; i<=10; i++) 

}//break 只是跳到這裡,外層的for迴圈還在繼續

console.log('break');

}

for(var i=1;i<=10;i++)  

console.log(i) //1234567910

}

return語句只能出現在函式體內,出現在**中的其他任何地方都會造成語法錯誤!return語句就是用於指定函式返回的值。

function

a()

}}console.log(a());

//報錯:uncaught syntaxerror: illegal return statement

for(var i=1;i<=10;i++)

console.log(i)

}

js中的一些方法

陣列 map 方法建立乙個新陣列,其結果是該陣列中的每個元素都呼叫乙個提供的函式後返回的結果。返回值 乙個新陣列,每個元素都是 函式的結果。var array1 1,4,9,16 const map1 array1.map x x 2 console.log map1 expected output...

JS遍歷物件屬性的一些方法

靜態方法reflect.ownkeys 返回乙個由目標物件自身的屬性鍵組成的陣列。object.entries 方法返回乙個給定物件自身可列舉屬性的鍵值對陣列,其排列與使用for.in迴圈遍歷該物件時返回的順序一致 區別在於for in迴圈還會列舉原型鏈中的屬性 object.fromentries...

JS陣列中的一些方法

let arr let arrjson 20,22,18,21 every 判斷陣列中每個元素都大於或小於乙個指定元素 let newarr arrjson.every item console.log newarr false 必須要全部滿足才會返回true sort 陣列排序 返回乙個新的陣列 ...