js中的幾種遍歷方法


1.for循環

1.基礎版
for (var i = 0; i < arr.length; i++) {

        }
2.優化版    
for(var i = 0, len = arr.length; i < len; i++) {
       }
 使用臨時變量,將長度緩存起來,避免重復獲取數組長度,當數組較大時優化效果才會比較明顯。
 這種方法基本上是所有循環遍歷方法中性能最高的一種,
 並且這一類型的for循環可以通過用中斷語句(break、continue、return)來中斷循環,      
 3.增強for循環
 

2. arr.foreach

遍歷數組中的每一項,沒有返回值,對原數組沒有影響.

當forEach操作基本數據類型的時候,並不會改變原數組中的值。而當forEach操作引用數據類型的時候,才會改變原數組中的值。

數組本身也是引用數據類型,所以我們要用forEach來修改基本數據類型的時候,可以通過引用訪問的方式來對元素進行修改。

不能通過中斷語句來終止循環。

arr = ['a', 'b', 'c', 'd']
        arr.forEach((item, index, array) => {
            console.log(item); 每一項的內容
            console.log(index);每一項內容下下標
            console.log(array);原始的數據 
        });
let arr = [1, 2, 3, 4]
arr.forEach((item, index) => {
	arr[index] = 0
})
console.log(arr)  // [0, 0, 0, 0]

3. arr.map

arr.foreach類似。有返回值,可以return出來

map的回調函數中支持return返回值;return的是啥,相當於把數組中的這一項變為啥

(並不影響原來的數組,只是相當於把原數組克隆一份,把克隆的這一份的數組中的對應項改變了);

arr2=arr.map((item, index, array) => {
          return  item = 2 * item
        });
        console.log(arr2);
        //arr2的內容會基於return的語句賦值給新的數組中的每一項
        //arr2相當於在arr每一項的基礎上*2

map和foreach區別::

1.forEach()方法不會返回執行結果,而是undefined。也就是說,forEach()會修改原來的數組。

map()方法會得到一個新的數組並返回。

2.forEach()的執行速度 < map()的執行速度

4.for···of

允許遍歷獲得鍵值(value),對於普通對象,沒有部署原生的 iterator 接口,直接使用 for...of 會報錯;

for...of 循環可以與break、continue 和 return 配合使用,跳出循環 

 循環可以用來遍歷數組、類數組對象,字符串、Set、Map 以及 Generator 對象

   arr2 = ['a', 'b', 'c', 'd']
        for (let ietm of arr2) {
            console.log(ietm);
        }
        //輸出 a,b,c,d

 5.for····in····

可以使用 for...in 循環遍歷鍵名

for...in 循環不僅遍歷數字鍵名,還會遍歷手動添加的其它鍵,甚至包括原型鏈上的鍵。for...of 則不會這樣

循環主要是為了遍歷對象而生,不適用於遍歷數組

arr2 = ['a', 'b', 'c', 'd']
        for (let item in arr2) {
            console.log(item);
        }
        //遍歷得到字符串類型的鍵  0,1,2,3
        
   arr2 = {
            am: 'a',
            bm: 'b',
            cm: 'c'
        }
        for (let item in arr2) {
            console.log(item);
        }
        //遍歷得到鍵名 am,bm,cm

 6.filter

 不會改變原始數組,返回新數組,用於對之前數組的過濾和篩選

var arr = [1, 2, 3];
const arr2=arr.filter(item => { // item為數組當前的元素
    return item > 1; // [2, 3]
})

map和filter的區別:

  • 相同點:filter 和 map 都是對數組的操作,均返回一個新的數組
  • 不同點:filter是滿足條件的留下,是對原數組的過濾;map則是對原數組的加工,映射成一一映射的新數組

7.somo() 和every()

every()是對數組中的每一項運行給定函數,如果該函數對每一項返回true,則返回true。(全部滿足才返回true)

 every()是對數組中的每一項運行給定函數,如果該函數對每一項返回true,則返回true。(一個滿足就返回true)

var arr = [ 1, 2, 3, 4, 5, 6 ]; 
console.log( arr.every( function( item, index, array ){ 
        return item > 3; 
    })); 
false

var arr = [ 1, 2, 3, 4, 5, 6 ]; 
    console.log( arr.some( function( item, index, array ){ 
        return item > 3; 
    })); 
true


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM